मैं प्रत्यक्ष असाइनमेंट और त्रिगुट सशर्त ऑपरेटरों पूर्वता लेकर संदेह में हूँ:त्रिगुट सशर्त और असाइनमेंट ऑपरेटर पूर्वता
#include<stdio.h>
int main(void)
{
int j, k;
j = k = 0;
(1 ? j : k) = 1; // first
printf("%d %d\n", j, k);
j = k = 0;
1 ? j : k = 1; // second
printf("%d %d\n", j, k);
return 0;
}
मैं उत्पादन होने की अपेक्षा करेंगे:
1 0
1 0
लेकिन यह होने वाला:
1 0
0 0
प्लस मैं इस चेतावनी मिलती है:
main.cpp: 20: चेतावनी: बयान कोई प्रभाव नहीं
लाइन मैं दूसरे के रूप में टिप्पणी की है के बारे में जो है।
चूंकि प्रत्यक्ष असाइनमेंट ऑपरेटर के पास टर्नरी सशर्त ऑपरेटर की तुलना में कम प्राथमिकता है, इसलिए मुझे उम्मीद थी कि रेखाएं पहले और दूसरे के बराबर होंगी। लेकिन हां यह मामला नहीं है।
मैंने कोशिश की इस के साथ जी ++ --version (उबंटू 4.4.3-4ubuntu5) 4.4.3
सी ++ एक चमत्कार है, या एक जानवर है? इसके साथ मेरे जीवन प्रोग्रामिंग के आधे खर्च करने के बाद भी मुझे इस तरह के सरल अभिव्यक्तियों के अर्थ को नहीं जानकर पकड़ा जा सकता है। मुझे इसे मानक में देखना था। – Suma