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_callableha una non const operator()che modifica una variabile membro .....
Supponiamo ora di creare un std::functionfuori 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()è constcome 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 è constcorretto?
std::function: i.stack.imgur.com/eNenN.png dove using _Ptrt = _Func_base<_Ret, _Types...>. Non ho niente da aggiungere.
std::functionha l'equivalente di unstruct a{ std::any x; };in esso .....