표현식 (Expressions)
연산자와 피연산자가 모여 만들어진 것,
계산된 표현식은 하나의 값(Value)을 만들어내고, 부가적인 동작을 일으킬 수 있으며,
하나의 표현식은 여러개의 서브-표현식으로 표현될 수 있다.
example :
- 표현식 2+2 -> 4
- 표현식 pritnf("%d", 4) -> 4를 표준출력하는 부가동작 발생.
주 표현식 (Primary Expressions)
주 표현식은 좀 더 복잡한 표현식을 이루는 구성단위이며,
하나의 주 표현식 또한, 여러개의 주 표현식으로 구성되어있을 수 있다.
리터럴, 식별자, 범위해설 연산자( :: )가 수식된 식별자 등이 여기에 해당된다.
주 표현식의 종류 :
- 리터럴, Literals
- 식별자, Un-qualified identifiers
- 범위해설 연산자가 수식된 식별자, Qualified identifiers
- 람다 표현식, Lambda expressions (since C++11)
- Fold Expressions (since C++17)
계산되지 않는 표현식 (Unevaluated Expressions)
컴파일하기 위해 런타임 이전에 계산되어야 하는 표현식.
실제 런타임에 해당 표현식은 계산되지 않는다.
계산되지 않는 표현식의 종류 :
- typeid
- sizeof
- noexcept (since C++11)
- decltype (since C++11)
example :
size_t n = sizeof(cout << 42);
sizeof(cout << 42)는 런타임에 계산되지 않는다.
즉, 해당 프로그램은 콘솔에 42를 출력하지 않는다.
폐기된 값 표현식 (Discarded-value Expressions)
부가적인 동작(side effect)만을 목적으로 하는 표현식.
Discarded-value 표현식의 종류 :
- 콤마 연산자의 왼쪽편에 있는 표현식.
- void로 캐스트하는 캐스팅 표현식.
example :
int a = (0, 1); // 0은 콤마 연산자 왼쪽의 표현식이므로 버려진다. // a == 1 static_cast<void>( printf("%d \n", a) ); // printf의 리턴값은 void로 캐스팅되어 버려진다. // 콘솔에는 1이 출력된다.
참고문헌
'# Lang > C++' 카테고리의 다른 글
4.3 우측값 참조 (rvalue reference) (0) | 2019.04.16 |
---|---|
4.2 값의 유형 (glvalue, prvalue, xvalue) (0) | 2019.04.11 |
3.2 기억영역 클래스 지정자 (0) | 2019.04.06 |
3.1 CV 제한자 (const, volatile) (0) | 2019.03.31 |
2.3 자료형과 형변환 (0) | 2019.03.29 |