मान लीजिए कि मेरे पास एक कॉल करने योग्य प्रकार है:
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; };
.....