Suponha que eu tenha um tipo de chamada assim:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Observe que mutable_callable
possui um não-const operator()
que modifica uma variável de membro .....
Agora, suponha que eu crie um std::function
fora do meu tipo:
std::function<int()> foo = mutable_callable{};
Agora eu posso fazer isso:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
Agora, tanto quanto eu posso dizer, std::function
s operator()
é o seguinte const
:
https://en.cppreference.com/w/cpp/utility/functional/function/operator ()
Então, meu pressentimento é que você não deve ser capaz de fazer isso ...
Mas, em seguida, consulte: https://en.cppreference.com/w/cpp/utility/functional/function/function
Isso não parece restringir se o tipo de chamada tem ou não uma constante operator()
......
Portanto, minha pergunta é a seguinte: estou certo ao supor que std::function<int()> const&
é essencialmente a mesma coisa std::function<int()>&
que não existe realmente diferença entre o comportamento dos dois ...... e, se for esse o caso, por que não está const
correto?
std::function
implementação do MSVC : i.stack.imgur.com/eNenN.png onde using _Ptrt = _Func_base<_Ret, _Types...>
. Eu descanso meu caso.
std::function
tem o equivalente a umstruct a{ std::any x; };
.....