// constexpr은 컴파일 시간 상수 만 넣을 수 있다. (컴파일 할 당시 상수인 것)
int n = 10;
// const는 런타임, 컴파일 타임 다 넣을 수 있음.
const int c1 = 10; // 컴파일 시간에 알 수 있다.(컴파일 시간 상수)
const int c2 = n; // 컴파일 시간에 알 수 없다. (실행시간 상수)
// constexpr은 컴파일 타임으로 한정 짓는다
constexpr int c3 = 10; // Ok
constexpr int c4 = n; // Compile Error, 컴파일 시간 상수만 넣을 수 있다.
Example
#include <iostream>
using namespace std;
int main()
{
// generic lambda : c++14
auto f1 = [](auto a, auto b){ return a + b; }
// nullary lambda : 괄호를 빼도 됨
auto f2 = [] { return 10; }
// c++17 : ()함수를 constexpr함수로
auto f3 = [](int a, int b) constexpr
{
return a + b;
};
int y[f3(1,2)]; // 컴파일타임에 상수로 고정됨
}