在書中泛型編程和STL(中國版),它說:構造函數或複製構造函數?
X x = X()
將調用拷貝構造函數。
對我來說這似乎有點不可思議。我寫這樣的
#include <iostream>
class Test {
public:
Test() {
std::cout << "This is ctor\n";
}
Test(const Test&) {
std::cout << "This is copy-ctor\n";
}
};
int main(int argc, char** argv)
{
Test t = Test();
return 0;
}
輸出一個測試程序是「這是構造函數」。好吧,現在我很困惑,這是對的?
在gcc中,你可能不得不使用'-fno-elide-constructors',因爲即使'-O0'也不能阻止elision,我想。 –
@Kerrek:謝謝! –
即使不是微不足道的*副本也可以被省略,通過構造臨時代替局部變量來消除副本。對象或副本的複雜性與該優化無關。 –