इसका मतलब है कि यदि कई ऑपरेटरों के साथ एक अभिव्यक्ति संदिग्ध है, तो ऑपरेटर जो "उपरोक्त" हैं, उन्हें कास्ट ऑपरेटर से पहले बुलाया जाएगा, और ऑपरेटर जो "नीचे कास्ट" हैं, को कास्ट ऑपरेटर के बाद बुलाया जाएगा। 2 + 2 * 2
गुणन में के रूप में 6 जिसके परिणामस्वरूप इसके पहले निष्पादित किया जाना चाहिए, नहीं, बल्कि 8.
चलो निम्नलिखित दो वर्गों जो एक दूसरे के castable हैं पर विचार करें:
class E2;
class E1 {
public:
operator E2();
E1 operator++(int) {
std::cout << "E1 Post-inc\n";
return *this;
}
E1 operator*(const E1&) {
std::cout << "E1 * E1\n";
return *this;
}
};
class E2 {
public:
operator E1() {
std::cout << "Cast E1 -> E2\n";
return E1();
}
E2 operator++(int) {
std::cout << "E2 Post-inc\n";
return *this;
}
E2 operator*(const E2&) {
std::cout << "E2 * E2\n";
return *this;
}
};
E1::operator E2() {
std::cout << "Cast E2 -> E1\n";
return E2();
}
तब के घोषित करते
E1 e1;
E2 e2;
और
(E1)e2++;
ई 1 और ई 2 दोनों ऑपरेटिंग हैं या ++
, तो इस अभिव्यक्ति में पहले क्या किया जाना चाहिए: कास्ट या वृद्धि? Precedence table जवाब है कि बढ़ाने के पहले किया जाना चाहिए, ताकि कार्यक्रम प्रिंट
E2 Post-inc
Cast E1 -> E2
फिर, के एक अधिक जटिल उदाहरण की कोशिश करते हैं:
e1 * (E1)e2++;
यहाँ हम 3 क्रिया (कोड में उनकी उपस्थिति के क्रम में) है : गुणा, कास्ट और वृद्धि। अगर निष्पादन होगा तो क्या होगा?प्राथमिकता तालिका का कहना है कि वृद्धि पहले है, कास्ट दूसरा है (यह वृद्धि के नीचे है) और गुणा अंतिम है, क्योंकि यह दोनों के नीचे है। तो उत्पादन होगा:
E2 Post-inc
Cast E1 -> E2
E1 * E1
ध्यान दें कि आप आसानी से संचालन कोष्ठकों का उपयोग क्रम बदल सकते हैं। उदाहरण के लिए, अगर हम बदलने के e1 * (E1)e2++;
(e1 * (E1)e2)++;
के साथ, हम
Cast E1 -> E2
E1 * E1
E1 Post-inc
मिलेगा यह [पूर्वता तालिका] में लाइन 3 से नीचे कुछ भी (http://en.cppreference.com/w/cpp/language/operator_precedence का मतलब)। –