Giả sử tôi có một loại có thể gọi như vậy:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Lưu ý rằng mutable_callable
có một hằng số operator()
sửa đổi một biến thành viên .....
Bây giờ giả sử tôi tạo ra một std::function
loại của tôi:
std::function<int()> foo = mutable_callable{};
Bây giờ tôi có thể làm điều này:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
Bây giờ như xa như tôi có thể nói với std::function
s operator()
là const
theo:
https://en.cppreference.com/w/cpp/utility/functional/function/operator ()
Vì vậy, cảm giác ruột của tôi là bạn không nên làm điều này .....
Nhưng sau đó nhìn vào: https://en.cppreference.com/w/cpp/utility/feftal/feft/feft
Điều này dường như không đặt ra bất kỳ ràng buộc nào về việc loại có thể gọi được có hằng số hay không operator()
......
Vì vậy, câu hỏi của tôi là: Tôi đúng khi cho rằng std::function<int()> const&
về cơ bản là giống như std::function<int()>&
điều đó thực sự không có sự khác biệt giữa hành vi của hai người ...... và nếu đó là trường hợp tại sao nó không const
đúng?
std::function
thực hiện MSVC : i.stack.imgur.com/eNenN.png ở đâu using _Ptrt = _Func_base<_Ret, _Types...>
. I nghỉ ngơi trường hợp của tôi.
std::function
có tương đương với astruct a{ std::any x; };
trong đó .....