2013-02-22 35 views
5

वहाँ दो ऑपरेटरों के बीच सामान्य रूप में"या" और "||" के बीच अंतर

if (a or b or c) { 

के बीच कोई अंतर है ... और ...

if (a || b || c) { 

... और अधिक, यहां तक ​​कि पूर्वता के मामले में?

+4

संख्या –

+0

किसी भी सम्मान में कोई अंतर नहीं है। वे बराबर हैं। – juanchopanza

+8

ओएमजी, सी ++ अनुभव के 10 साल और मुझे नहीं पता था कि वे ('या', 'और' आदि) अस्तित्व में हैं ... –

उत्तर

6

स्टाइलिस्ट भावना के अलावा जो कई अनुभवी प्रोग्रामर सोचते हैं "हू, क्या किसी ने अचानक पास्कल लिखना शुरू कर दिया है?", इसमें कोई कार्यात्मक अंतर नहीं है।

इन वैकल्पिक नामों का उद्देश्य एएससीआईआई के मानक स्थानीय संस्करण का उपयोग करने के लिए, कहने, स्वीडन या जर्मनी में रहने वाले लोगों को अनुमति देना है, जहां |ö है।

यूनिकोड और विस्तारित एएससीआईआई की शुरूआत के बाद से, इस आवश्यकता को काफी गायब कर दिया गया है, क्योंकि राष्ट्रीयकृत चरित्र सेटों को अपने राष्ट्रीय "विशेष" पात्रों का उत्पादन करने के लिए कम आम तौर पर इस्तेमाल किए गए पात्रों को "चोरी" करने की आवश्यकता नहीं होती है।

+0

विश्वविद्यालय में वापस, मैंने देखा कि एक आदमी को मैक्रो लाइब्रेरी है जिसमें सी ++ कोड लगभग पास्कल की तरह दिख रहा है। 'स्टार्ट' और 'एंड' सहित। – Sulthan

+1

मुझे आपका दूसरा पैराग्राफ नहीं समझा - मेरे ज्ञान के लिए 'ö' डैनिश ASCII तालिका में मौजूद नहीं है और निश्चित रूप से डैनिश कीबोर्ड पर नहीं है। एक डैनिश कीबोर्ड पर पाइप वर्ण '|' '← बैकस्पेस 'के बाईं ओर पहली पंक्ति में स्थित है और' Å' से अधिक है जबकि यूएस कीबोर्ड पाइप पर है - जैसा कि आप सभी जानते हैं - '← बैकस्पेस' के नीचे स्थित है। – Muleskinner

+0

ASCII ASCII है, और कोई भिन्नता नहीं है। हो सकता है कि आप कोडेपेज का मतलब हो, लेकिन वे केवल एएससीआईआई से परे क्षेत्र में भिन्न होते हैं, यानी 128 से 255 के चरित्र मूल्य। | 'और' & 'वर्ण ASCII में हैं और इसलिए किसी भी कोडपृष्ठ में हैं। अन्य देशों में अलग-अलग कुंजीपटल लेआउट है, और जब उन विशेष पात्रों को एक्सेस करना मुश्किल हो सकता है, 'या', 'और' आदि आते हैं। –

2

संपादित आप operator or ओवरलोड कर सकते हैं।

वे वही हैं।

Operators in C and C++ देखें।

यदि आप किसी प्रकार के लिए operator or अधिभारित करते हैं, तो आप उसी प्रकार के लिए operator|| ओवरलोड नहीं कर सकते क्योंकि संकलक उन्हें एक ही कार्य करने के लिए मानेंगे।

> prog.cpp: In function ‘bool operator||(Type, Type)’: 
> prog.cpp:8:6: error: redefinition of ‘bool operator||(Type, Type)’ 
> prog.cpp:4:6: error: ‘bool operator||(Type, Type)’ previously defined here 

पर ideaone:

class Type {} 
}; 

bool operator or(Type lhs, Type rhs) { 
    return true; 
} 

bool operator ||(Type lhs, Type rhs) { 
    return false; 
} 

int main() { 
    Type a; 
    Type b; 
    a or b; 
    a || b; 
} 
+0

जबकि आप '||' की तुलना में एक अलग चीज़ का मतलब अधिभारित नहीं कर सकते हैं ओवरलोड '||' और 'या' का उपयोग करके भी इसका उपयोग किया जाएगा। – PlasmaHH

+0

आप इसे अधिभारित कर सकते हैं, लेकिन फिर इसे 'ऑपरेटर या' नाम दिया गया है। – MSalters

1

प्रति ISO14882 के रूप में:

यह त्रुटि निम्न कोड से आता है 2011 (ई) 2.6-2 (तालिका 2) or के लिए एक वैकल्पिक टोकन है ||, और जैसा कि बिल्कुल वही अर्थ है:

langua के सभी मामलों में जीई, प्रत्येक वैकल्पिक टोकन समान रूप से, इसके प्राथमिक टोकन के रूप में, इसकी वर्तनी को छोड़कर व्यवहार करता है।

अक्सर कंपाइलर्स उन्हें #define or || या आंतरिक समकक्ष के रूप में लागू करते हैं।

and, bitor, xor, compl, bitand, and_eq, or_eq, xor_eq, not और not_eq के लिए एक ही

1

जैसा कि अन्य उत्तरों में कहा गया था, दोनों एक जैसा हैं और इस प्रकार विनिमय योग्य हैं। लेकिन एक बड़ा अंतर है: एमएसवीसी, सी ++ बिल्डर और शायद अन्य कंपाइलर्स भी एक विशेष हेडर सहित or का समर्थन नहीं करते हैं। यह or एक पोर्टेबिलिटी बाधा का उपयोग करता है।

संबंधित मुद्दे