Припустимо, я маю такий тип дзвінка:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Зауважте, що mutable_callable має non-const, operator()що змінює змінну члена .....
Тепер припустимо, що я створюю std::functionсвій тип:
std::function<int()> foo = mutable_callable{};
Тепер я можу це зробити:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
Тепер, наскільки я можу сказати std::function, operator()єconst відповідає:
https://en.cppreference.com/w/cpp/utility/functional/function/operator ()
Тож моє відчуття кишки полягає в тому, що ти не повинен цього робити ...
Але потім дивлячись: https://en.cppreference.com/w/cpp/utility/functional/function/function
Це, здається, не ставить обмежень щодо того, чи має тип виклику постійний чи ні operator()......
Отже, моє запитання таке: я правильно вважаю, що std::function<int()> const&це по суті те саме, що і std::function<int()>&те, що фактично немає різниці між поведінкою обох ......, і якщо це так, чому це не constправильно?
std::function: i.stack.imgur.com/eNenN.png where using _Ptrt = _Func_base<_Ret, _Types...>. Я решту своєї справи.
std::functionмає еквівалент аstruct a{ std::any x; };в ньому .....