调用 std::function 我也有一个 const 引用
Calling a std::function that I have a const reference too
我有点困惑地发现这段代码编译运行并打印出 1 2 3:
#include <functional>
#include <iostream>
int main() {
std::function<int()> counter = [i = 0]() mutable { i++; return i; };
std::cout << counter() << std::endl;
const auto& constRef = counter;
std::cout << constRef() << std::endl;
std::cout << counter() << std::endl;
}
当我们只持有 const&
到 std::function
时,能够调用底层函数的非常量 operator()
似乎违反了常量正确性。有什么我想念的吗?
it's call operator 的唯一重载是
std::function<R(Args...)>::operator()( Args... args ) const;
它不会将 const 传播到它的目标。
我有点困惑地发现这段代码编译运行并打印出 1 2 3:
#include <functional>
#include <iostream>
int main() {
std::function<int()> counter = [i = 0]() mutable { i++; return i; };
std::cout << counter() << std::endl;
const auto& constRef = counter;
std::cout << constRef() << std::endl;
std::cout << counter() << std::endl;
}
当我们只持有 const&
到 std::function
时,能够调用底层函数的非常量 operator()
似乎违反了常量正确性。有什么我想念的吗?
it's call operator 的唯一重载是
std::function<R(Args...)>::operator()( Args... args ) const;
它不会将 const 传播到它的目标。