#include <algorithm>
#include <vector>
#include <iostream>
// initialise sum and summing function
int sum = 0;
void sum_numbers( const int& number );
// Create a test for our sum function
int main(int argc, const char * argv[])
{
// create some numbers
std::vector<int> numbers;
numbers.push_back( 34 );
numbers.push_back( 73 );
numbers.push_back( 14 );
// passing "sum_numbers" function as a parameter
std::for_each( numbers.begin(), numbers.end(), sum_numbers );
// check that our sum function worked
std::cout << "The sum of numbers is: " << sum << std::endl;
return 0;
}
// add the current number to the sum
void sum_numbers( const int& number )
{
sum += number;
}
6条答案
按热度按时间whlutmcx1#
foo.push_back(Parameter());
将一个临时构造的Parameter对象传递给push_back
,而不是构造函数,即。Parameter()
是一个调用,用于在堆栈上创建一个类型为Parameter
的对象,并将其传递给vector
的push_back
函数,在那里它被移动/复制。因此,传递的不是构造函数本身,而是一个构造对象。这只是一种写
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
ghhkc1vu2#
该行将创建
Parameter
的临时示例并将其复制到Foo
中。假设这是C++11之前的代码。新的std::vector<T>::push_back
有一个右值重载,在这种情况下将没有副本。50few1ms3#
当你调用
Parameter()
时,一个临时对象被创建并传递给foo.push_back()
函数。之前你声明了一个名为Parameter a;
的对象,并将其传递给了类似于foo.push_back(a)
的对象。通过这样做,您可以在程序中使用名为a
的对象。zpjtge224#
你不是在传递一个构造函数,而是在传递一个临时对象。当你因为相位而执行
Paramater()
时,它会创建一个对象。它有点像一个函数调用,例如getInput()
。ecbunoof5#
我们在这里遗漏的另一点是,要将函数作为参数传递,根本不需要使用括号。下面是一个将函数作为参数传递的例子:
jhiyze9q6#
这个主题已经很老了,但是我想补充一些东西,如果你真的想传递一个构造函数作为参数(作为函数指针)而不创建一个临时对象,如果你使用的是最近的C++标准,你可以这样做