c++ - कॉमा ऑपरेटर क्या करता है?




operators comma-operator (6)

अधिक व्यापक उत्तर पर अल्पविराम ऑपरेटर (गैर अतिभारित) के रूप में हल करता है, पहले भाग को निष्पादित करता है और दूसरा भाग वापस करता है।

इसलिए यदि आपके पास (foo (), बार ()) दोनों फ़ंक्शन निष्पादित होंगे, लेकिन अभिव्यक्ति का मान बार () के मूल्यांकन करता है (और अभिव्यक्ति का प्रकार भी)

हालांकि मैं नहीं कहूंगा कि इसके लिए उचित उपयोग हैं, आमतौर पर कोड पढ़ने के लिए थोड़ा मुश्किल माना जाता है। मुख्य रूप से क्योंकि कई भाषाओं में ऐसे निर्माण नहीं होते हैं। इसलिए अंगूठे का एक निजी नियम होने के रूप में मैं इसे तब तक नहीं टालता जब तक कि मैं एक पूर्ववर्ती अभिव्यक्ति के लिए कोड जोड़ रहा हूं और इसके प्रारूप को पूरी तरह बदलना नहीं चाहता हूं।

उदाहरण: मेरे पास एक मैक्रो है (अगर आप मैक्रोज़ का उपयोग नहीं करना चाहिए या नहीं, इस पर चर्चा नहीं करते हैं, कभी-कभी यह भी नहीं कि आपने इसे लिखा है)

FIND_SOTHTHING (X) (x> 2)? find_fruits (x): खोज_हाउस (x)

और मैं आमतौर पर इसे my_possession = FIND_SOMETHING (34);

अब मैं इसे डिबगिन प्रयोजनों के लिए लॉग इन करना चाहता हूं लेकिन मैं फ़ंक्शन को नहीं बदल सकता। मैं कर सकता था :

FIND_SOTHTHING (X) (x> 2)? (LOG ("फलों की तलाश"), खोज_फुट (एक्स)) :( LOG ("घरों की तलाश"), खोज_हाउस (x))

निम्न कोड C / C ++ में क्या होता है?

if (blah(), 5) {
    //do something
}

कॉमा ऑपरेटर लागू किया जाता है और मान 5 को सशर्त के सत्य / झूठी निर्धारित करने के लिए उपयोग किया जाता है।

यह blah () को निष्पादित करेगा और वापस कुछ (संभवतया) प्राप्त करेगा, तो अल्पविराम ऑपरेटर कार्यरत है और 5 केवल एक ही चीज होगी जो अभिव्यक्ति के लिए सही / गलत मान निर्धारित करने के लिए उपयोग की जाएगी।

नोट करें कि, ऑपरेटर को बदले जाने वाले प्रकार के blah () फ़ंक्शन के लिए ओवरलोड किया जा सकता है (जो निर्दिष्ट नहीं किया गया था), जिसके परिणामस्वरूप परिणाम निष्प्रभाव न हो।


मुझे एक बात पता है कि इस तरह के कोड को करना चाहिए: यह कोडेर निकाल दिया जाना चाहिए। मुझे ऐसे किसी व्यक्ति के बगल में काम करने में डर है जो इस तरह से लिखता है


मैं कहूंगा कि ब्ला पर निर्भर करता है ()


यदि कॉमा ऑपरेटर ओवरलोड नहीं है, तो कोड इसी प्रकार से है:

blah();
if (5) {
  // do something
}

यदि कॉमा ऑपरेटर ओवरलोड है, तो परिणाम उस फ़ंक्शन पर आधारित होगा।

#include <iostream>
#include <string>

using namespace std;

string blah()
{
    return "blah";
}

bool operator,(const string& key, const int& val) {
    return false;
}

int main (int argc, char * const argv[]) {

    if (blah(), 5) {
        cout << "if block";
    } else {
        cout << "else block";
    }

    return 0;
}

(कॉमा ऑपरेटर ओवरलोडिंग परिदृश्य दिखाने के लिए संपादित किया गया है। इस पर टिप्पणी करने के लिए डेविड पियर के लिए धन्यवाद)


रोग संबंधी मामले में, यह उस पर निर्भर करता है जो अल्पविराम ऑपरेटर करता है ...

class PlaceHolder
{
};

PlaceHolder Blah() { return PlaceHolder(); }

bool operator,(PlaceHolder, int) { return false; }

if (Blah(), 5)
{
    cout << "This will never run.";
}






comma-operator