Предположим, у меня есть вызываемый тип, например:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Обратите внимание, что mutable_callableесть неконстантный, 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::functionS 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реализации MSVC : i.stack.imgur.com/eNenN.png где using _Ptrt = _Func_base<_Ret, _Types...>. Я считаю так.
std::functionимеет эквивалентstruct a{ std::any x; };в нем .....