use*_*912 7 c++ const std-function
我惊讶地发现这段代码编译:
#include <functional>
struct Callable {
void operator() () { count++; }
void operator() () const = delete;
int count = 0;
};
int main() {
const Callable counter;
// counter(); //error: use of deleted function 'void Callable::operator()() const'
std::function<void(void)> f = counter;
f();
const auto cf = f;
cf();
}
Run Code Online (Sandbox Code Playgroud)
https://wandbox.org/permlink/FH3PoiYewklxmiXl
这将调用非const调用运算符Callable
.相比之下,如果你这样做,const auto cf = counter; cf();
它会按预期出错.那么,为什么const正确性似乎没有被遵循std::function
?
std::function
添加了一个间接层,这个间接层不会通过const
ness 传递给callable.
我不确定为什么会这样 - 可能因为std::function
需要一个可调用的副本而不需要保留副本const
(事实上这可能会破坏赋值语义) - 我也不确定为什么你需要它.
(当然,直接调用operator()
你恰好调用Callable
并声明为的类型的对象const
将需要一个const
上下文,就像对任何其他对象一样.)
最佳做法是给予可调用a const
operator()
并将其保留.
tl; dr:是的,但不是一个bug,并不重要