關於賦值有許多有趣的事情,其中之一就是:你可以把賦值操作連在一起:
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...