为什么不多次调用构造函数?

Bee*_*and 0 c++ constructor

我将通过Marshall Cline的C++ FAQ.

目前正在使用10.5点的代码.

我有这个:

class Fred
{
public:
  Fred();
  Fred(int x, int y)
  {
    std::cout << "Fred with two ints\n" << std::endl;
  };
};

int main()
{
  std::vector<Fred>(3, Fred(4,5));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望看到"Fred with two ints"打印3次 - 但它只打印一次.为什么 - 是不是被调用了3次?

Moh*_*han 6

这是vector您正在调用的构造函数的签名:

vector( size_type _Count, const Type& _Val, const Allocator& _Alloc = Allocator() );
Run Code Online (Sandbox Code Playgroud)

Fred(4,5)调用您定义的构造函数一次,并通过引用传递创建的实例到vector<Fred>构造函数.然后,将[创建的实例]复制3次到向量.使用(默认)复制构造函数执行复制操作; 所以你的构造函数不会被调用多次.