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_callablecó 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::functionloạ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::functions operator()là consttheo:
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::functionthự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::functioncó tương đương với astruct a{ std::any x; };trong đó .....