वर्ग का निम्नलिखित कार्यान्वयन सीएमपी / जेई बयानों की एक श्रृंखला का उत्पादन करता है जैसे कि मैं एक जंजीर की अपेक्षा करता हूं यदि कथन:
int square(int num) {
if (num == 0){
return 0;
} else if (num == 1){
return 1;
} else if (num == 2){
return 4;
} else if (num == 3){
return 9;
} else if (num == 4){
return 16;
} else if (num == 5){
return 25;
} else if (num == 6){
return 36;
} else if (num == 7){
return 49;
} else {
return num * num;
}
}
और निम्नलिखित रिटर्न के लिए एक डेटा टेबल तैयार करता है:
int square_2(int num) {
switch (num){
case 0: return 0;
case 1: return 1;
case 2: return 4;
case 3: return 9;
case 4: return 16;
case 5: return 25;
case 6: return 36;
case 7: return 49;
default: return num * num;
}
}
क्यों जीसीई एक में सबसे ऊपर एक को अनुकूलित करने में असमर्थ है?
संदर्भ के लिए विखंडन: https://godbolt.org/z/UP_igi
EDIT: दिलचस्प बात यह है कि स्विच केस के लिए MSVC डेटा टेबल की बजाय जंप टेबल बनाता है। और आश्चर्यजनक रूप से, क्लैंग उन्हें उसी परिणाम के लिए अनुकूलित करता है।
return
; मामलों की संख्या नहीं है breaks
, इस प्रकार स्विच में निष्पादन का एक विशिष्ट क्रम भी है। यदि / अन्यथा श्रृंखला में प्रत्येक शाखा में रिटर्न है, तो इस मामले में शब्दार्थ समतुल्य हैं। अनुकूलन असंभव नहीं है । एक counterexample icc किसी भी फंक्शन को ऑप्टिमाइज़ नहीं करता है।