जो नियम केवल foo->bar
बराबरी के (*foo).bar
ऑपरेटरों के लिए है।
यूनीरी में operator *
हमेशा पॉइंटर डेरेफेरेंस शब्दार्थ नहीं होता है। मैं एक पुस्तकालय बना सकता था जिसमें इसका अर्थ होता है मैट्रिक्स ट्रांसपोज़ेशन, शून्य या अधिक पार्सर मिलान, या बहुत कुछ।
यह भाषा को और अधिक परेशान कर देगा यदि ऐसा कुछ भी हो जो operator *
एक साथ अचानक से अधिभारित हो जाए, operator ->
तो आपके लिए शब्दार्थ के साथ नहीं पूछा जाएगा, जो समझ में नहीं आता है।
operator ->
अलग से अधिभार है, इसलिए यदि आप एक चाहते हैं, तो आप न्यूनतम प्रयास के साथ एक को ओवरलोड कर सकते हैं।
यह भी ध्यान दें कि इस तरह के अधिभार में कुछ बल्कि दिलचस्प गुण होंगे, जैसे स्वचालित रूप से operator ->
कॉलिंग का पीछा करना जब तक कि चेन में से कोई एक कच्चा पॉइंटर न लौटाए। यह स्मार्ट पॉइंटर्स और अन्य प्रॉक्सी प्रकारों के लिए काफी उपयोगी है।
#include <boost/make_shared.hpp>
#include <boost/shared_ptr.hpp>
#include <string>
#include <iostream>
#include <ostream>
struct Foo
{
boost::shared_ptr<std::string> operator -> () const
{
return boost::make_shared<std::string>("trololo");
}
};
int main()
{
Foo foo;
std::cerr << foo->size() << std::endl;
}