Diyelim ki böyle bir çağrılabilir türü var:
struct mutable_callable
{
int my_mutable = 0;
int operator()() { // Not const
return my_mutable++;
}
};
Not mutable_callableolmayan bir const sahiptir operator()değiştirir üye değişkeni olduğunu .....
Şimdi varsayalım türümden bir std::functiondışarı:
std::function<int()> foo = mutable_callable{};
Şimdi bunu yapabilirim:
void invoke(std::function<int()> const& z)
{
z();
}
int main()
{
invoke(foo); // foo changed.....oops
}
Şimdi bildiğim kadarıyla söyleyebilirim std::functions operator()olduğu const: uyarınca
) (https://en.cppreference.com/w/cpp/utility/functional/function/operator
Yani benim içimdeki his, bunu yapamamanız gerektiğidir .....
Ama sonra şuraya bakın: https://en.cppreference.com/w/cpp/utility/functional/function/function
Bu çağrılabilir tür sabit olup olmadığını herhangi bir kısıtlama koymak gibi görünmüyor operator()......
Ben varsayarak doğru duyuyorum: Bu benim soru Yani std::function<int()> const&esasen aynı şey std::function<int()>&olduğunu ikisinin davranışları arasındaki fark hiçbir aslında orada olduğunu ...... ve bu durumda ise neden değil mi constdoğru?
std::functionuygulamasının iç kısımlarının küçük bir parçası : i.stack.imgur.com/eNenN.png burada using _Ptrt = _Func_base<_Ret, _Types...>. Diyeceğimi dedim.
std::functioniçinde eşdeğer birstruct a{ std::any x; };..... var