今天看c陷阱與缺陷,又看到了一處提到strcpy,下面有庫裡面的實現的**:
//這是整理過的,不是原書的**char *strcpy(char *dest, const char *src)
while ((*dest++=*src++)!='\0'); 這一句讓我想了很久,以前一直認為賦值運算子返回的是是否複製成功,現在看起來它應該返回的是左值的值。
於是我去搜尋了一下,排除好多講c++過載的文章後,終於發現了一篇賦值運算子的返回值。
其中有乙個例子,先來看看:
#include int main()
如果賦值運算子返回左值的值的話,(a*=2)和(a+=3)應該返回2和5,那麼結果應該是a = 5, c = 7。如果是這樣,後面也不用寫了。事實上結果讓我吃了一驚,這個例子的結果如下:
a = 5, c = 10
其實c語言的賦值運算子會返回左值的位址而不是值,上面的**就相當於在a*=2,和a+=3執行完後將兩個a相加。
下面再來看乙個例子
#include int main()
這個例子會輸出什麼呢?
5, 5, a = 5 麼?
忘了printf壓棧是從右至左的。它會輸出:
8, 8,a = 8
回頭想想c++過載賦值運算子的時候講的該返回變數的引用,其實跟這個差不多
賦值運算子的返回值問題
最近看到c 的運算子過載,賦值運算子如 為什麼operator operator 的返回值必須是物件的引用,書上說是保證這樣的表示式賦值a b c,我把返回值改為按值返回,也能通過啊。今天在看劍指offer時突然被這個問題困惑,為此上網查查,特此記錄一下。話不多說,先貼上 cmystring ope...
運算子過載 函式返回值
舉例 include using namespace std class test test operator test temp1,test temp2 test operator test temp int main 結果1 vs2005執行結果 結果2 更改 過載函式為返回值,即test op...
C 值賦值運算子過載
c 值賦值運算子過載的格式是這樣的 類名 operator const 類名 物件名 同拷貝建構函式一樣,若沒有定義賦值運算子過載,則編譯器會自動生成乙個預設的賦值運算子過載,編譯器自動生成預設賦值運算子過載同樣是等位賦值,也就是淺拷貝,會造成記憶體洩漏和重析構。重析構就不用說了,跟拷貝建構函式一樣...