在书中泛型编程和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:谢谢! –
即使不是微不足道的*副本也可以被省略,通过构造临时代替局部变量来消除副本。对象或副本的复杂性与该优化无关。 –