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_callable
possède un non-const operator()
qui modifie une variable membre .....
Supposons maintenant que je crée un std::function
de 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::function
s operator()
est const
comme 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 const
correct?
std::function
implémentation MSVC : i.stack.imgur.com/eNenN.png où using _Ptrt = _Func_base<_Ret, _Types...>
. Je me repose mon cas.
std::function
a l'équivalent d'un astruct a{ std::any x; };
dedans .....