Misalkan saya memiliki tipe callable seperti:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Catatan yang mutable_callable
memiliki non-const operator()
yang memodifikasi variabel anggota .....
Sekarang anggaplah saya membuat std::function
keluar dari tipeku:
std::function<int()> foo = mutable_callable{};
Sekarang saya bisa melakukan ini:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
Sekarang sejauh yang saya tahu std::function
s operator()
adalah const
sebagai per:
https://en.cppreference.com/w/cpp/utility/functional/function/operator ()
Jadi firasatku adalah kamu tidak seharusnya bisa melakukan ini .....
Tetapi kemudian melihat: https://en.cppreference.com/w/cpp/utility/functional/function/function
Ini sepertinya tidak menempatkan kendala pada apakah tipe callable memiliki konstanta operator()
......
Jadi pertanyaan saya adalah ini: Saya benar dalam mengasumsikan bahwa std::function<int()> const&
pada dasarnya hal yang sama dengan std::function<int()>&
yang ada sebenarnya tidak ada perbedaan antara perilaku keduanya ...... dan jika itu masalahnya mengapa tidak const
benar?
std::function
implementasi MSVC : i.stack.imgur.com/eNenN.png di mana using _Ptrt = _Func_base<_Ret, _Types...>
. Saya mengistirahatkan koper saya.
std::function
memiliki yang setara denganstruct a{ std::any x; };
di dalamnya .....