본문 바로가기

# Lang/C++

4.1 표현식


 표현식 (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