मैं विशेषण "तकनीकी" का अर्थ भाषा व्यवहार / क्वर्क और संकलक साइड इफेक्ट्स जैसे कि उत्पन्न कोड के प्रदर्शन से लेता हूं।
यह अंत करने के लिए, जवाब है: नहीं (*)। (*) "कृपया अपने प्रोसेसर मैनुअल से परामर्श करें"। यदि आप कुछ एज-केस RISC या FPGA सिस्टम के साथ काम कर रहे हैं, तो आपको यह जांचने की आवश्यकता हो सकती है कि क्या निर्देश उत्पन्न होते हैं और उनकी लागत क्या है। लेकिन अगर आप किसी भी पारंपरिक आधुनिक वास्तुकला का उपयोग कर रहे हैं, तो , और , और lt
, लागत में कोई महत्वपूर्ण प्रोसेसर स्तर अंतर नहीं है ।eq
ne
gt
यदि आप एक बढ़त मामले का उपयोग कर रहे आप पा सकते हैं कि !=
तीन परिचालन (की आवश्यकता है cmp
, not
, beq
) दो (बनाम cmp
, blt xtr myo
)। फिर, उस मामले में आरटीएम।
अधिकांश भाग के लिए, कारण रक्षात्मक / सख्त होते हैं, खासकर जब संकेत या जटिल छोरों के साथ काम करते हैं। विचार करें
// highly contrived example
size_t count_chars(char c, const char* str, size_t len) {
size_t count = 0;
bool quoted = false;
const char* p = str;
while (p != str + len) {
if (*p == '"') {
quote = !quote;
++p;
}
if (*(p++) == c && !quoted)
++count;
}
return count;
}
एक कम वंचित उदाहरण वह होगा जहां आप वेतन वृद्धि करने के लिए रिटर्न मान का उपयोग कर रहे हैं, उपयोगकर्ता से डेटा स्वीकार करना:
#include <iostream>
int main() {
size_t len = 5, step;
for (size_t i = 0; i != len; ) {
std::cout << "i = " << i << ", step? " << std::flush;
std::cin >> step;
i += step; // here for emphasis, it could go in the for(;;)
}
}
इसे आज़माएं और 1, 2, 10, 999 मानों को इनपुट करें।
आप इसे रोक सकते हैं:
#include <iostream>
int main() {
size_t len = 5, step;
for (size_t i = 0; i != len; ) {
std::cout << "i = " << i << ", step? " << std::flush;
std::cin >> step;
if (step + i > len)
std::cout << "too much.\n";
else
i += step;
}
}
लेकिन जो आप शायद चाहते थे
#include <iostream>
int main() {
size_t len = 5, step;
for (size_t i = 0; i < len; ) {
std::cout << "i = " << i << ", step? " << std::flush;
std::cin >> step;
i += step;
}
}
एक कन्वेंशन बायस की ओर भी कुछ है <
, क्योंकि मानक कंटेनरों में ऑर्डर करना अक्सर निर्भर करता है operator<
, उदाहरण के लिए कई एसटीएल कंटेनरों में हैशिंग कहकर समानता का निर्धारण करते हैं
if (lhs < rhs) // T.operator <
lessthan
else if (rhs < lhs) // T.operator < again
greaterthan
else
equal
यदि lhs
और rhs
कोई उपयोगकर्ता परिभाषित वर्ग है जो इस कोड को लिख रहा है
if (lhs < rhs) // requires T.operator<
lessthan
else if (lhs > rhs) // requires T.operator>
greaterthan
else
equal
कार्यान्वयनकर्ता को दो तुलनात्मक कार्य करने होंगे। इसलिए <
पसंदीदा ऑपरेटर बन गया है।
i++
करने के लिएi+=2
(उदाहरण के लिए), यह (हमेशा के लिए या संभवतः) एक बहुत लंबे समय के लिए चलेंगे। अब, चूंकि आप आम तौर पर<
उन मामलों के लिए उपयोग करते हैं, जहां आप 1 से अधिक द्वारा पुनरावृत्त वृद्धि करते हैं , तो आप<
उस मामले के लिए भी उपयोग कर सकते हैं जहां आप इसे 1 (वृद्धि के लिए) बढ़ाते हैं।