> 백엔드 개발 > C++ > 본문

C/C++ 삼항 연산자에 대한 몇 가지 흥미로운 관찰

PHPz
풀어 주다: 2023-09-15 19:29:02
앞으로
1156명이 탐색했습니다.

C/C++ 삼항 연산자에 대한 몇 가지 흥미로운 관찰

if..else 절 대신 삼항 연산자가 구현된다는 것을 알고 있습니다. ?:로 표시됩니다. '? ' 기호는 if 부분과 동일하고 ':'는 else 부분과 동일합니다. 다음 3개 프로그램은 삼항 연산자의 경우에 대한 몇 가지 흥미로운 관찰을 설명합니다.

다음 프로그램은 오류 없이 컴파일됩니다. 삼항 표현식의 반환 유형은 float(예: exp2)일 것으로 예상되며 exp3(즉, 리터럴 0 - int 유형)은 암시적으로 float로 변환 가능합니다.

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   float fvalue = 3.111f;
   cout<< (test1 ? fvalue : 0) << endl;
   return 0;
}
로그인 후 복사

다음 프로그램은 컴파일러가 삼항 표현식의 반환 유형을 찾거나 찾을 수 없거나 exp2(문자 배열)와 exp3(int) 사이에 암시적 변환이 없기 때문에 컴파일되지 않습니다.

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   cout<< test1 ? "A String" : 0 << endl;
   return 0;
}
로그인 후 복사

다음 프로그램은 컴파일이 가능하지만 실행 시 실패할 수 있습니다. 삼항 표현식의 반환 유형은 유형(char *)으로 제한되지만 표현식은 int를 반환하므로 프로그램이 실패합니다. 말 그대로 프로그램은 실행 시간이나 런타임에 0번째 주소에 있는 문자열을 인쇄하려고 시도합니다.

#include <iostream>
using namespace std;
int main(){
   int test1 = 0;
   cout << (test1 ? "A String" : 0) << endl;
   return 0;
}
로그인 후 복사
exp2는 출력 유형으로 처리되고 exp3는 실행 시간이나 런타임에 exp2로 변환될 수 있음을 알 수 있습니다. 변환이 암시적인 것으로 간주되면 컴파일러는 다음을 수행합니다. 변환된 스텁을 삽입합니다. 변환이 명시적 작업으로 처리되면 컴파일러에서 오류가 발생합니다. 컴파일러가 이러한 오류를 무시할 수 있으면 프로그램은 실행 시간이나 런타임 시 실패할 수 있습니다.

위 내용은 C/C++ 삼항 연산자에 대한 몇 가지 흥미로운 관찰의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!