[英]std::function const correctness
假设我有一个像这样的可调用类型:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
请注意, mutable_callable
具有修改成员变量的非常量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
s 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
正确的?
这归结为与struct A { int* x; };
相同struct A { int* x; };
struct A { int* x; };
, 其中在一个const A a;
您可以修改*(ax)
的值(但不能修改它指向的位置)。 std::function
有一个间接级别(来自类型擦除), const
不会通过它传播。
不, std::function<int()> const& f
并非毫无意义。 在std::function<int()>& f
您可以将不同的函子分配给f
,而在const
情况下则不能这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.