[c++] 삼항 연산자의 Prettiness 대 if 진술


1 Answers

잘...

나는 GCC와이 함수 호출로 몇 가지 테스트를 수행했다.

add(argc, (argc > 1)?(argv[1][0] > 5)?50:10:1, (argc > 2)?(argv[2][0] > 5)?50:10:1, (argc > 3)?(argv[3][0] > 5)?50:10:1);

gcc -O3을 사용하여 생성 된 어셈블러 코드에는 35 개의 명령어가 있습니다.

if / else + 중간 변수와 동일한 코드는 36을가집니다. 3> 2> 1이라는 사실을 사용하여 if / else를 중첩 시키면 44가됩니다.이 함수를 별도의 함수 호출로 확장하려고하지 않았습니다.

이제는 성능 분석을하지 않았고 결과 어셈블러 코드의 품질 검사를 수행하지도 않았지만 반복문이없는 단순한 무언가에서 짧은 코드가 더 좋다고 믿습니다.

결국 삼항 연산자에 대한 가치가있는 것으로 보입니다 :-)

물론 코드 속도가 절대적으로 중요한 경우에만 해당됩니다. if / else 문은 중첩 될 때 (c1)? (c2)? (c3)? (c4)? : 1 : 2 : 3 : 4보다 훨씬 쉽게 읽을 수 있습니다. 그리고 함수 인자로 거대한 표현을 갖는 것은 재미 있지 않습니다 .

또한 중첩 된 삼항 표현식은 코드를 리팩토링하거나 편리한 printfs ()를 한꺼번에 배치하여 디버깅하는 것을 훨씬 어렵게 만듭니다.

Question

몇 가지 코드를 탐색 중이며 몇 개의 삼항 연산자가 있습니다. 이 코드는 우리가 사용하는 라이브러리이며, 꽤 빠르다고합니다.

우리가 거기있는 공간을 제외하고 무엇이든 저장한다면 나는 생각하고 있습니다.

너의 경험은 뭐니?




사실, "if-else"표현에 찬성하여 "if-else"진술을 잊어 버리는 많은 언어가있을 때 두 언어 사이에 구별이 있어야 한다고 가정합니다 (이 경우에는 더 이상 필요하지 않은 삼항 연산자를 가짐)

상상해보십시오.

x = if (t) a else b

어쨌든, 삼항 연산자는 "if-else"표현이 없으므로 일부 언어 (C, C #, C ++, Java 등)의 표현식이므로 다른 역할을 담당 합니다.



Related