在std :: function中是const和&忽略的吗?

kpt*_*cna 16 c++ c++11

为什么这段代码会编译?

std::function<void(const int&)> f = [](int a)
{

};
Run Code Online (Sandbox Code Playgroud)

不是int和const int&不同的类型?

yur*_*hek 20

它们是不同的,但没关系,因为const int&参数可以传递给int参数,这就是所需要的.


Pix*_*ist 16

您的代码工作的原因是std::function<R(Args...)>获取任意函数对象的模板化构造函数F需要F在Args...返回时可调用R.

template<class R, class... ArgTypes> 
class function<R(ArgTypes...)> { 
    template<class F> function(F f); 
};
Run Code Online (Sandbox Code Playgroud)

要求:F应为CopyConstructible.对于参数类型和返回类型,f应为CallableArgTypesR.[...]

函数对象int使用是可调用的const int&,因此该代码有效并且满足要求,因为两者都返回void.