Припустимо, я маю такий тип дзвінка:
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; };
в ньому .....