c 賦值建構函式為什麼返回引用型別?

2022-04-30 14:45:10 字數 1604 閱讀 1200

0前言

1內建型別

2自定義型別3結論

4原始碼c++預設賦值建構函式的返回值是引用型別,c++賦值運算子=的本意是返回左值的引用,我們過載賦值建構函式的時候,返回值是否應該設為引用型別呢?按照《effective c++》中第10條,最好是設為引用型別。

本文,通過實驗來表述返回值是否為引用型別的區別。

int i= 1,     j=2,    k=3;

i == 1

j == 1

k == 1

i == 1

j == 2

k == 1

people p1("p1"),     p2("p2"),     p3("p3");

p3 == p1

p2 == p1

p3 == p1

p2 == p1

p3 == p1

p2 == p1

p3 == p1

p2 == p2

p3 == p1

p2 == p2

p3 == p2

p2 == p2

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

std::cout;

using

std::endl;

using std::string

;using

std::vector;

using

std::stringstream;

void

test_int()

void

test_int2()

class

people

people

operator=(const people &_p)

string

name;

};void

test()

void

test2()

class

peopleref

peopleref& operator=(const peopleref &_p)

string

name;

};void

test_ref()

void

test_ref2()

class

peopledefault

string

name;

};void

test_default()

void

test_default2()

intmain ()

此文章為 '永無止境'(入駐一點號的**名稱)原創,特此宣告!

c 賦值運算子為什麼要返回引用

一 c c 賦值運算子的本意為 返回左值的引用 左值 賦值號左面的變數而非其值 例 int a,b 3,c 2 a b c cout 對於a b a,b均為物件時 若不返回左值的引用,將會生成臨時物件。如果不處理a b c這樣的表示式,也會正常 只是會呼叫拷貝建構函式和析構函式處理臨時物件 二 為了...

拷貝建構函式為什麼要用引用?

一 引用 1.概念 引用不是新定義乙個變數,而是給已經存在的變數取了個別名,編譯器不會為引用開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間。2.和指標區別 引用在定義時必須初始化,指標沒有要求 引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實體 沒有...

為什麼建構函式沒有返回值?

意見 1 我認為建構函式隱含的返回值就是this,因為建構函式是在類的物件產生時自動呼叫。建構函式被呼叫也就意味著產生了乙個物件,而this指標是與物件實體相關聯的,所以我認為它返回的就是this。舉例如下 class a a aa 此語句導致類a的建構函式a 被自動呼叫返回乙個首位址,系統就在記憶...