std :: function vs std :: function&作为函数参数

时间:2015-04-29 16:34:15

标签: c++ c++11

考虑以下三个函数,

func1(std::function<size_t(...) > f, ...);
func2(std::function<size_t(...) >& f );
func3(const std::function<size_t(...)> &f);  

对于通过value / copy-constructor传递的任何其他类型的参数,通过引用传递和传递const引用都有一个清晰的上下文,并且它们的用例是众所周知的。

对于function<>个对象,例如通过const引用传递保存时间(例如调用潜在的复制构造函数)或空格(不需要将整个函数对象传递给堆栈)?一个函数对象在第一个位置有多大,值得通过const引用传递?我的猜测是它大致是一个指针的大小 - 这是正确的吗?

1 个答案:

答案 0 :(得分:2)

让我们选择gcc 4.9并检查:

cout << sizeof(int(*)(double, double)) << endl;
cout << sizeof(function<int(double, double)>) << endl; 

输出:

8
32

可调用的大小当然大于指针大小,并且您可以通过const引用传递它。然而,这只是一个好主意,只要您能够保证只要您打算使用它就会通过const引用传递对象(无论它是否开始std::function<>)。< / p>