常量表達式 & constexpr
阿新 • • 發佈:2017-10-11
能夠 運用 expr 使用 結果 推出 con const對象 普通
【常量表達式】
一個這樣的表達式:值不會改變 && 在編譯過程中就能夠得到計算結果
常見的常量表達式:字面值、用常量表達式初始化的const對象
一個對象是不是常量表達式由它的數據類型和初始值共同決定:
const int cc = 1; cc是一個常量表達式,因為它①是一個常量,②值在編譯過程就能夠得到(使用字面值初始化的)。
int cz = 1; cz盡管由字面值初始化,但它的數據類型是int,所以它不是常量表達式。
const int cd = get_val(); cd不是一個常量表達式,盡管它是一個常量,但它的值直到運行時才能獲取到。
運用到常量表達式的情形:數組的大小
【constexpr變量】
因為很難分辨一個初始值到底是不是常量表達式,所以我們推出了constexpr類型。
聲明為constexpr的變量一定是一個常量,而且必須用常量表達式初始化:
constexpr int mf = 20;
constexpr int lm = mf + 1;
constexpr int sz = get_val();
不能使用普通函數作為constexpr變量的初始值,所以上面的get_size()必須是constexpr函數,這種函數足夠簡單以至於編譯時就可以計算其結果。
用處,比如你想設置一個常量表達式作為數組的大小,便可以設置如上變量。
常量表達式 & constexpr