将构造函数传递给函数

lar*_*pco 5 c++ constructor temporary-objects

我正在使用STL向量,它是参数的向量.

std::vector<Parameter> foo;
Run Code Online (Sandbox Code Playgroud)

我试图找到一种方法将Parameter对象添加到向量而不执行此操作:

Parameter a;
foo.push_back(a);
Run Code Online (Sandbox Code Playgroud)

我遇到了一个执行此操作的实现:

foo.push_back(Parameter()); //Using the Parameter constructor
Run Code Online (Sandbox Code Playgroud)

我认为当我创建一个对象时,构造函数被调用,反之亦然.为什么我可以将构造函数传递给函数?

leg*_*s2k 6

foo.push_back(Parameter());将临时构造的Parameter对象传递给构造函数push_back而不是构造函数,即Parameter()调用Parameter在堆栈上创建类型的对象并将其传递给push_back函数vector,然后将其移动/复制.因此传递的不是构造函数本身,而只是构造对象.

Parameter a; foo.push_back(a);当一个人确信a没有在任何地方使用时,这只是一种简写的写作方式; 而不是声明一个虚拟的临时变量,创建并传递匿名临时变量.

如果您想了解有关临时工具的更多信息,这些可能会很有用:

http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=198

http://msdn.microsoft.com/en-us/library/a8kfxa78%28v=vs.80%29.aspx