2010-03-17 56 views
1

以下兩個語句在語義上是否相同?以下兩個語句在語義上是否相同?

#1 person p("Rahul", 20);

#2 person const &p = person("Rahul", 20);

編輯:

對不起,我的意思是問以下兩個是否語義相同:

#1 person const p("Rahul", 20);

#2 person const &p = person("Rahul", 20);

+0

訪問的事實,影響不是第二個C++ 0x? – 2010-03-17 09:40:05

+0

@Space_Cowboy:這是一個有效的C++ 98。 – missingfaktor 2010-03-17 09:40:49

回答

2

他們不是。然而,差異僅由在第二種情況下需要一個拷貝構造函數是在C++ 03(即使拷貝構造函數的調用實際上並沒有完成)

// works with #1 fails with #2 
struct f1 { f1(string, int); private: f1(f1 const&); }; 
5

不,他們不是。 p在每種情況下的表現方式都不相同。例如,在後一種情況下,您不能說:

p.rename("fred"); 

假設人員有一個rename()方法。

當然,如果你的第一個實例已經:

const person p("Rahul", 20); 

兩個本來更相似。我希望你不打算爲所有的「變量」使用參考:-)

+0

所以他們是相似的,不一樣? – missingfaktor 2010-03-17 09:48:53

+0

@Rahul對於const版本,我想不出讓他們分開的一種方式,但我相信別人會想出一些東西。 – 2010-03-17 09:54:19

+0

你可以定義一個引用(似乎是什麼)一個臨時的,那個臨時性的東西?我不知道。 – Ari 2010-03-17 11:20:35