Supponiamo che io abbia un tipo richiamabile in questo modo:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Nota che mutable_callable
ha una non const operator()
che modifica una variabile membro .....
Supponiamo ora di creare un std::function
fuori dal mio tipo:
std::function<int()> foo = mutable_callable{};
Ora posso fare questo:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
Ora, per quanto ne so std::function
, operator()
è const
come per:
https://en.cppreference.com/w/cpp/utility/functional/function/operator ()
Quindi la mia sensazione è che non dovresti essere in grado di farlo .....
Ma poi guardando: https://en.cppreference.com/w/cpp/utility/functional/function/function
Questo non sembra porre alcun vincolo sul fatto che il tipo richiamabile abbia o meno una costante operator()
......
Quindi la mia domanda è questa: ho ragione nel presumere che std::function<int()> const&
sia essenzialmente la stessa cosa, perché in std::function<int()>&
realtà non c'è differenza tra il comportamento dei due ... e se è così, perché non è const
corretto?
std::function
: i.stack.imgur.com/eNenN.png dove using _Ptrt = _Func_base<_Ret, _Types...>
. Non ho niente da aggiungere.
std::function
ha l'equivalente di unstruct a{ std::any x; };
in esso .....