Angenommen, ich habe einen aufrufbaren Typ wie folgt:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Beachten Sie, dass mutable_callable
es eine Nicht-Konstante gibt operator()
, die eine Mitgliedsvariable ändert .....
Angenommen, ich erstelle ein std::function
Out aus meinem Typ:
std::function<int()> foo = mutable_callable{};
Jetzt kann ich das machen:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
Soweit ich das beurteilen kann, lautet std::function
s wie operator()
folgt const
:
https://en.cppreference.com/w/cpp/utility/functional/function/operator ()
Mein Bauchgefühl ist also, dass Sie dies nicht können sollten .....
Aber dann schauen Sie sich Folgendes an: https://en.cppreference.com/w/cpp/utility/functional/function/function
Dies scheint keine Einschränkungen dafür zu setzen, ob der aufrufbare Typ eine Konstante hat oder nicht operator()
......
Meine Frage lautet also: Ich gehe zu Recht davon aus, dass dies std::function<int()> const&
im Wesentlichen dasselbe ist, nämlich std::function<int()>&
dass es keinen tatsächlichen Unterschied zwischen dem Verhalten der beiden gibt. Wenn dies der Fall ist, warum ist es dann nicht const
richtig?
std::function
Implementierung: i.stack.imgur.com/eNenN.png where using _Ptrt = _Func_base<_Ret, _Types...>
. Ich ruhe meinen Fall aus.
std::function
hat das Äquivalent zu einemstruct a{ std::any x; };
darin .....