조건 연산자: ? :Conditional Operator: ? :

구문Syntax

expression ? expression : expression

설명Remarks

조건 연산자 (?:)는 3 개의 피연산자를 사용 하는 삼항 연산자입니다.The conditional operator (? :) is a ternary operator (it takes three operands). 조건 연산자는 다음과 같이 사용됩니다.The conditional operator works as follows:

  • 첫 번째 피연산자는로 암시적으로 변환 됩니다 bool .The first operand is implicitly converted to bool. 계속하기 전에 피연산자가 계산되고 의도하지 않은 모든 결과가 완료됩니다.It is evaluated and all side effects are completed before continuing.

  • 첫 번째 피연산자가 true (1)로 계산 되는 경우 두 번째 피연산자가 계산 됩니다.If the first operand evaluates to true (1), the second operand is evaluated.

  • 첫 번째 피연산자가 false (0)로 계산 되 면 세 번째 피연산자가 계산 됩니다.If the first operand evaluates to false (0), the third operand is evaluated.

조건 연산자의 결과는 두 번째 또는 세 번째 피연산자가 계산된 결과입니다.The result of the conditional operator is the result of whichever operand is evaluated — the second or the third. 마지막 피연산자 2개 중 1개만 조건식에서 계산됩니다.Only one of the last two operands is evaluated in a conditional expression.

조건식은 오른쪽과 왼쪽이 연결되어 있습니다.Conditional expressions have right-to-left associativity. 첫 번째 피연산자는 정수 계열 또는 포인터 형식이어야 합니다.The first operand must be of integral or pointer type. 다음 규칙이 두 번째 피연산자와 세 번째 피연산자에 적용됩니다.The following rules apply to the second and third operands:

  • 두 피연산자의 형식이 동일할 경우 결과도 해당 형식입니다.If both operands are of the same type, the result is of that type.

  • 두 피연산자가 모두 산술 또는 열거형 형식이 면 일반적인 산술 변환 ( 표준 변환에 포함 됨)이 공통 형식으로 변환 됩니다.If both operands are of arithmetic or enumeration types, the usual arithmetic conversions (covered in Standard Conversions) are performed to convert them to a common type.

  • 두 피연산자가 모두 포인터 형식이거나 하나는 포인터 형식이고 나머지 하나는 0으로 계산된 상수 식일 경우 공용 형식으로 변환하기 위해 포인터 변환이 수행됩니다.If both operands are of pointer types or if one is a pointer type and the other is a constant expression that evaluates to 0, pointer conversions are performed to convert them to a common type.

  • 두 피연산자가 모두 참조 형식일 경우 공용 형식으로 변환하기 위해 참조 변환이 수행됩니다.If both operands are of reference types, reference conversions are performed to convert them to a common type.

  • 두 피연산자가 모두 void 형식일 경우 공용 형식이 void 형식입니다.If both operands are of type void, the common type is type void.

  • 두 피연산자의 형식이 동일한 사용자 정의 형식인 경우 공통 형식이 해당 형식입니다.If both operands are of the same user-defined type, the common type is that type.

  • 피연산자의 형식이 다르고 피연산자 중 하나 이상의 형식이 사용자 지정 형식인 경우 공통 형식을 결정하기 위한 언어 규칙이 사용됩니다.If the operands have different types and at least one of the operands has user-defined type then the language rules are used to determine the common type. 아래의 경고를 참조하세요.(See warning below.)

위의 목록에 없는 두 번째 피연산자와 세 번째 피연산자의 조합은 부적합합니다.Any combinations of second and third operands not in the preceding list are illegal. 결과의 형식은 공용 형식이며, 두 번째 피연산자와 세 번째 피연산자가 같은 형식이고 둘 다 l-value일 경우 l-value입니다.The type of the result is the common type, and it is an l-value if both the second and third operands are of the same type and both are l-values.

경고

두 번째와 세 번째 피연산자의 형식이 같지 않으면 C++ 표준에 지정된 복합 형식 변환 규칙이 호출됩니다.If the types of the second and third operands are not identical, then complex type conversion rules, as specified in the C++ Standard, are invoked. 이러한 변환이 수행되면 임시 개체 생성 및 제거를 비롯한 예기치 않은 동작이 발생할 수 있습니다.These conversions may lead to unexpected behavior including construction and destruction of temporary objects. 그러므로 조건부 연산자와 함께 사용자 정의 형식을 피연산자로 사용하지 않거나, 사용자 정의 형식을 사용하는 경우에는 명시적으로 각 피연산자를 공용 형식으로 캐스팅하는 것이 좋습니다.For this reason, we strongly advise you to either (1) avoid using user-defined types as operands with the conditional operator or (2) if you do use user-defined types, then explicitly cast each operand to a common type.

예제Example

// expre_Expressions_with_the_Conditional_Operator.cpp
// compile with: /EHsc
// Demonstrate conditional operator
#include <iostream>
using namespace std;
int main() {
   int i = 1, j = 2;
   cout << ( i > j ? i : j ) << " is greater." << endl;
}

참고 항목See also

C++ 기본 제공 연산자, 우선 순위 및 결합성C++ Built-in Operators, Precedence and Associativity
조건식 연산자Conditional-Expression Operator