讓賦值運算子返回乙個指向 this 的 引用

2021-04-24 02:56:53 字數 819 閱讀 6931

關於賦值有許多有趣的事情,其中之一就是:你可以把賦值操作連在一起:

int x, y, z;

x = y = z = 15;//

一連串的賦值

令一件有趣的事是:這一賦值工作是自右結合的,所以上面的賦值鏈可以解析成這樣:

x = (y = (z = 15));

在這裡,15首

先賦值給

z,然後這次賦值的結果(就是更新過的

z的值)將賦給

y,然後這次賦值的結果(就是更新過的

y的值)又賦給x。

這種實現方法的本質是:賦值時,返回乙個指向運算子左手邊引數的引用,當你為你的類實現賦值運算子時,你應該遵循這一慣例:

class widget

...};

這一慣例對於所有的賦值運算子同樣適用,不僅僅是上述的標準形式。於是,我們要這樣書寫:

class widget

widget&operator=(intrhs)// 即使某些時刻運算子的引數不合常規,

...};

這僅僅是乙個慣例,不遵循這一慣例的**也能夠得到編譯。然而,所有的內建資料型別,以及標準庫中所包括(或者即將包括的,可以參見第

54條)的所有型別(比如說,

string

、vector

、complex

、tr1::shared_ptr

,等等)都遵守這一慣例。當你要做一些有悖於該慣例的事情時先要考慮一下,是否有充分的理由這樣做?否則請遵循慣例。

需要記住的 l

讓賦值運算子返回乙個指

向*this

的引用。

為string類新增乙個賦值運算子函式

include include include using namespace std class cstring cstring cstring const cstring str cstring operator const cstring str 一般方法。return this cstrin...

賦值運算子的返回值問題

最近看到c 的運算子過載,賦值運算子如 為什麼operator operator 的返回值必須是物件的引用,書上說是保證這樣的表示式賦值a b c,我把返回值改為按值返回,也能通過啊。今天在看劍指offer時突然被這個問題困惑,為此上網查查,特此記錄一下。話不多說,先貼上 cmystring ope...

java第一章 運算子 賦值運算子

賦值運算子基本的賦值運算子 拓展的賦值運算子 解析 x 100等同於x x的資料型別 x 100 同理 x 100等同於x x的資料型別 x 100 x 100等同於x x的資料型別 x 100 x 100等同於x x的資料型別 x 100 x 100等同於x x的資料型別 x 100 上案例 pa...