在下面的代码中,我希望调用 A 的构造函数,然后调用 A 的复制构造函数。然而,事实证明只有构造函数被调用。
// MSVC++ 2008
class A
{
public:
A(int i):m_i(i)
{
cout << "constructor\n";
}
A(const A& a)
{
m_i = a.m_i;
cout << "copy constructor\n";
}
private:
int m_i;
};
int main()
{
// only A::A() is called
A a = 1;
return 0;
}
我想编译器足够聪明,可以优化第二次调用,直接用构造函数初始化对象 a 。那么它是标准定义的行为还是仅仅是实现定义的行为?
答案 0 :(得分:6)
答案 1 :(得分:2)
这里没有优化。在初始化中使用=
时,以右侧作为参数调用构造函数是等效的(几乎)。所以这个:
A a = 1;
(大部分)与此相当:
A a(1);