나는 형용사 "기술적"을 사용하여 생성 된 코드의 성능과 같은 언어 행동 / 질투 및 컴파일러 부작용을 의미합니다.
이를위한 대답은 no (*)입니다. (*)는 "프로세서 설명서를 참조하십시오". 일부 첨단 RISC 또는 FPGA 시스템으로 작업하는 경우 생성되는 명령어와 비용을 확인해야합니다. 당신은 거의 모든 기존의 현대 건축을 사용하는 경우, 그때가 사이의 비용 유의 프로세서 수준의 차이는 없다 lt
, eq
, ne
와 gt
.
경우 당신이 가장자리 케이스를 사용하는 당신은 찾을 수있는 !=
세 가지 작업 (요구 cmp
, not
, beq
(두 대)를 cmp
,blt xtr myo
). 이 경우에도 RTM입니다.
대부분의 경우, 특히 포인터 나 복잡한 루프로 작업 할 때 방어 / 경화가 발생합니다. 치다
// 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<
여러 STL 컨테이너에 인스턴스 해싱을 위해, 말함으로써 평등을 결정한다
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 씩 증가시키는 경우 에도 사용할 수 있습니다 .