考慮下面的代碼:爲什麼這裏需要複製構造函數?
struct S
{
S() {}
void f();
private:
S(const S&);
};
int main()
{
bool some_condition;
S my_other_S;
(some_condition ? S() : my_other_S).f();
return 0;
}
GCC編譯失敗這一點,他說:
test.cpp: In function 'int main()':
test.cpp:6:5: error: 'S::S(const S&)' is private
test.cpp:13:29: error: within this context
我不明白爲什麼拷貝構造應在該行正發生 - 的意圖是簡單地呼籲f()
上有一個默認構造的S
實例,或my_other_S
,也就是說,它應該等同於:
if (some_condition)
S().f();
else
my_other_S.f();
第一種情況和爲什麼需要複製構造函數有什麼不同?
EDIT:是否有任何方式,然後,在此表示「上執行此操作或者預先存在的對象上的臨時」在表達式上下文?
是不是if語句做你想要什麼?在單個表達式中做所有事情的優點是什麼(混淆除外)? – 2011-03-30 07:38:43
@Bo if語句需要重複'f()'部分,這部分實際上可能是一個帶有許多參數的函數,每個參數都可能是冗長的表達式的結果......您得到的想法 – HighCommander4 2011-03-30 19:37:34
@Bo此外,在某些上下文可能無法將表達式重寫爲if語句 - 例如,如果該表達式在初始化列表中用作實例變量的初始值設定項。 – HighCommander4 2011-03-30 20:08:08