Предположим, у меня есть вызываемый тип, например:
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::function
S 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; };
в нем .....