Supposons que j'ai un type appelable comme ceci:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Notez que mutable_callablepossède un non-const operator()qui modifie une variable membre .....
Supposons maintenant que je crée un std::functionde mon type:
std::function<int()> foo = mutable_callable{};
Maintenant, je peux le faire:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
Maintenant , pour autant que je peux dire std::functions operator()est constcomme par:
https://en.cppreference.com/w/cpp/utility/functional/function/operator ()
Donc, mon instinct est que vous ne devriez pas pouvoir faire ça .....
Mais en regardant ensuite: https://en.cppreference.com/w/cpp/utility/functional/function/function
Cela ne semble pas imposer de contraintes quant au fait que le type appelable ait ou non une constante operator()......
Donc ma question est la suivante: j'ai raison de supposer que std::function<int()> const&c'est essentiellement la même chose que std::function<int()>&c'est qu'il n'y a pas réellement de différence entre le comportement des deux ...... et si c'est le cas pourquoi n'est-ce pas constcorrect?
std::functionimplémentation MSVC : i.stack.imgur.com/eNenN.png où using _Ptrt = _Func_base<_Ret, _Types...>. Je me repose mon cas.
std::functiona l'équivalent d'un astruct a{ std::any x; };dedans .....