考虑以下三个函数,
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引用传递?我的猜测是它大致是一个指针的大小 - 这是正确的吗?
答案 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>