隐式构造函数转换的编译器优化

时间:2011-08-10 05:15:13

标签: c++ constructor implicit-conversion

在下面的代码中,我希望调用 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 。那么它是标准定义的行为还是仅仅是实现定义的行为?

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:2)

这里没有优化。在初始化中使用=时,以右侧作为参数调用构造函数是等效的(几乎)。所以这个:

A a = 1;

(大部分)与此相当:

A a(1);