मान लीजिए कि मेरे पास एक कॉल करने योग्य प्रकार है:
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रों 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 जहाँ using _Ptrt = _Func_base<_Ret, _Types...>। बस इतना ही कहना चाहता हूं।
std::functionइसमें a के बराबर हैstruct a{ std::any x; };.....