rus*_*tyx 5 c++ c++11 std-function
请考虑以下示例:
#include <iostream>
#include <functional>
struct A
{
int i;
void operator()()
{
std::cout << ++i;
}
};
void test(std::function<void()> const& fun)
{
fun();
}
int main() {
const std::function<void()> f{A{}};
test(f);
test(f);
}
Run Code Online (Sandbox Code Playgroud)
在这里,a const std::function能够呼叫非const operator().
输出:
12
Run Code Online (Sandbox Code Playgroud)
如果我提供一个mutablelambda例如,也会发生同样的情况test([x = 0]() mutable { ++x; });
怎么可能?
const std::function可以包装一个可变的函子是正常的吗?
const std::function可以包装一个可变的函子是正常的吗?
不幸的是,是的.std::function::operator()是无条件限定的const,并不关心包裹Callable是否发生变异.一些文章试图解决这个问题,但AFAIK没有具体的决定:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4348.html
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0045r1.pdf
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |