【发布时间】:2009-11-18 18:40:05
【问题描述】:
这里是小代码sn-p:
class A
{
public:
A(int value) : value_(value)
{
cout <<"Regular constructor" <<endl;
}
A(const A& other) : value_(other.value_)
{
cout <<"Copy constructor" <<endl;
}
private:
int value_;
};
int main()
{
A a = A(5);
}
我假设输出将是“常规构造函数”(用于 RHS),然后是“复制构造函数”用于 LHS。所以我避免了这种风格,总是将类变量声明为A a(5);。但令我惊讶的是,上面的代码从未调用过复制构造函数(Visual C++ 2008)
有谁知道这种行为是编译器优化的结果,还是 C++ 的某些记录(和可移植)特性的结果?谢谢。
【问题讨论】:
-
它已经过优化,避免了构造+复制。我发现这是一个很好的假设,即没有用户会根据参数进行构造,这与它所做的复制构造不同
-
在 g++ 中,您可以使用选项 -fno-elide-constructors 禁用此优化
标签: c++ constructor copy-constructor