函式返回的臨時物件為const型別,const引用

2021-06-20 12:35:59 字數 910 閱讀 5324

#include #include using namespace std;

class a

public:

int m_int;

};a getint()

int test( const a& pa )

char test1( const a& pa )

int main()

string foo( );  //

凡是返回值物件都是臨時物件?

void bar(string & s);

那麼下面的表示式將是非法的:

bar(foo( ));

bar("hello world");

原因在於foo( )

和"hello world"

串都會產生乙個臨時物件,而在

c++中,這些臨時物件都是

const

型別的。因此上面的表示式就是試圖將乙個

const

型別的物件轉換為非

const

型別,這是非法的。引用型引數應該在能被定義為

const

的情況下,盡量定義為

const 。

正是因為此,string &string::operate=( const string& other )中引數為const引用,原因有二:1. 可能會有const變數傳給它,而乙個const變數不能隨意轉化成非const變數; 2. s3 = s2+s1中,s2+s1函式返回乙個string值物件,為乙個臨時物件,再把該臨時物件傳給它,所以要為const型別,至於程式設計師面試寶典p121中的:」不用const也會報錯,因為用」+「必須返回乙個操作值已知的mystring物件,除非它是乙個const物件「,這句話我沒看懂,不知道這句話的意思是不是我剛才這個意思。

C 函式返回值為const

c 函式返回值為const 令函式返回值為const,往往可以降低因使用者錯誤而造成的意外,而又不至於放棄安全性和高效性。class rational class rational operator const rational lhs,const rational rhs rational a,b...

關於函式返回引用和const物件

class node const node fun const node obj return obj 則可以這樣使用該函式 node obj node res fun obj res的位址與obj的不同,其中任乙個變數值的改變不會影響另乙個變數 或const node res fun obj 必須...

C 函式返回物件為引用

當返回型別為引用時,我們可以用引用來接受,也可以用普通變數來接受。返回型別為普通型別時,例如int,被調函式結束的時候,會生成乙個臨時物件,然後return的內容拷貝給這個臨時物件。但返回型別為引用時,不會生成臨時物件。會直接返回物件。id 正確 id 錯誤,但是不會報錯 sw.setscore s...