假设我有一个可调用类型,如下所示:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
注意,mutable_callable
具有一个非const的operator()
,用于修改成员变量...
现在假设我从我的类型创建一个std::function
:
std::function<int()> foo = mutable_callable{};
现在我可以做到这一点:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
据我所知,std::function
的operator()
是const
的,如下所示:
https://en.cppreference.com/w/cpp/utility/functional/function/operator()
因此,我的直觉是你不应该这样做......
但是看看这里: https://en.cppreference.com/w/cpp/utility/functional/function/function
它似乎没有对可调用类型是否具有常量operator()
施加任何限制......
所以我的问题是:我正确地认为std::function<int()> const&
本质上与std::function<int()>&
相同,即两者的行为实际上没有区别吗?如果是这样,那么为什么不是const
正确的呢?
std::function
中有一个等价于struct a{ std::any x; };
的东西..... - DarthRubikstd::function
实现的内部小片段: https://i.stack.imgur.com/eNenN.png,其中using _Ptrt = _Func_base<_Ret, _Types...>
。我已经说明了我的观点。 - Max Langhof