[C++] #define과 const 그리고 constexpr

2024. 9. 1. 01:47·programming/개념 정리

코드를 보다보면 세가지가 잘 쓰이는데 정확한 차이가 무엇인가 확실히 짚기 위해 쓴다

 

✅ 결론 : 컴파일 타임에 타입까지 확인하는 constexpr를 쓰는 것을 권장한다.

 

 

 

`#define`

  • 전처리기 지시어: 컴파일 전에 코드에서 사용됩니다.
  • 매크로 정의: 단순한 텍스트 치환으로, 타입이 없고, 컴파일 타임 검사가 없습니다.
#define PI 3.14

 

 

`const`

  • 변수 선언: 변수를 상수로 선언하여 값을 변경할 수 없다.
  • 타입 지정: 타입이 있으며, 컴파일 타임과 런타임에서 사용될 수 있다. 
const double pi = 3.14;

 

 

`constexpr`

  • 컴파일 타임 상수: 컴파일 타임에 값을 계산할 수 있는 상수를 정의한다. 
  • 타입 지정: const와 비슷하지만, 반드시 컴파일 타임에 평가될 수 있는 표현식으로 초기화해야 한다. 
constexpr double pi = 3.14;

컴파일 타임에 상수 취급되므로 당연히 속도에서 더 이득이므로 최적화하기 좋다. 

 

 

 

const와 constexpr의 차이를 모르겠다면..

rand 라는 변수에 `std::rand()`를 이용해 랜덤값을 넣어보자. 

 

 

const의 경우는 아무런 문제 없이 잘된다. 런타임에 rand()가 대입된 후 바뀌지 않는 변수일 뿐인다. 

const rand = std::rand();

 

 

반면, constexpr는 컴파일 타임에 값이 정해져야하기 때문에 런타임에 값이 나오는 `std::rand`를 사용할 수 없다. 

//constexpr rand = std::rand();

 

 

 

저작자표시 비영리 변경금지 (새창열림)
'programming/개념 정리' 카테고리의 다른 글
  • [node.js] axios와 fetch의 비교
  • [C++] NULL vs nullptr, 포인터에서 nullptr을 사용해야 하는 이유
  • [Javs SE 8] Function<T, R> 과 apply()
  • [OS] LRU 알고리즘이란? 정의부터 구현까지 알아보자!
u1qns
u1qns
http://github.com/u1qns
  • u1qns
    개발 블로그
    u1qns
  • 전체
    오늘
    어제
    • 분류 전체보기 (173)
      • 회고 (1)
      • programming (17)
        • 개념 정리 (6)
        • CI CD (1)
        • 트러블 슈팅 (0)
        • 환경설정 및 팁 (7)
      • problem solving (155)
        • 개념 정리 (3)
        • 백준 (129)
        • SWEA (15)
        • 프로그래머스 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    되추적
    SSAFY
    미해결
    HELLOSSAFY
    DFS
    cmath
    SWEA
    삼성청년SW아카데미
    SSAFY수료식
    C++
    boj
    백준
    구현
    cpp
    BFS
    투포인터
    POW
    완전탐색
    그리디
    DP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
u1qns
[C++] #define과 const 그리고 constexpr
상단으로

티스토리툴바