字面值型別

2021-08-14 05:06:00 字數 1024 閱讀 9230

1、字面值常量:乙個形如42的值被稱作字面值常量,這樣的值一望而知。每個字面值常量都對應一種資料型別,字面值常量的形式和值決定了它的資料型別,包含:

2、常量表示式:指值不會改變並且在編譯過程就能得到計算結果的表示式。很顯然,字面值屬於常量表示式,用常量表示式初始化的const物件也是常量表示式。乙個物件是不是常量表示式由它的資料型別和初始值共同決定。例如

const int max_files = 20;  //常量表示式

const int limit = max_files + 1 ; //limit是常量表示式

int staff_size =27;//staff_size不是常量表示式

const int sz = get_size();//sz不是常量表示式,因為在編譯期間不能得到sz的值,只有在執行時才能得到;

3、constexpr變數

c++語言有幾種情況是要用到常量表示式的。我們當然可以定義乙個const變數並且把乙個初始值設為我們認為的某個常量表示式,但是,在乙個複雜的系統中,很難(幾乎不可能)分辨乙個初始值到底是不是常量表示式。那麼在實際的使用中,儘管我們本意是把乙個const變數的初始值設為乙個常量表示式,但是在實際的執行中我們發現卻並不是表示式的情況。在此種情況下,物件的定義和使用根本就是兩回事。

so,c++11規定,允許將變數宣告為constexpr型別,以便由編譯器來驗證變數的值是不是乙個常量表示式。宣告為constexpr的變數一定是乙個常量,而且必須用常量表示式初始化。

constexpr int mf = 20;//20是常量表示式;

constexpr int limit = mf + 1;//mf+1是常量表示式;

constexpr int sz = size() //只有當size()是乙個constexpr函式時,才是一條正確的宣告語句;

4、字面值型別:常量表示式的值需要在編譯時就得到計算,因此對宣告constexpr時用到的型別必須有所限制。這些型別統稱為字面值型別(literal type)。

參考:c++ primer p59、p267

字面值型別

只有內建型別 內建型別是程式語言自己定義的一些型別 存在字面值,沒有類 class 型別字面值。例如 0是int型別的字面值,3.14159是double型別的字面值。1 整型浮點字面值20 decimal 十進位制 024octal 八進位制 0x14 hexadecimal 十六進製制 128u...

C 中字面值常量和字面值型別

乙個形如42的值被稱為字面值常量。字面值常量的形式和值決定了常量的型別。例如0x42是16進製表示的整型常量。a 是char型字面值。字面值常量顧名思義由字面意思表示,是常量。字面值常量在程式中是直接表示的,整型直接寫出大小,字元直接寫出字元。乙個字面值常量在編譯時被直接解析為立即數,編譯器內部維護...

C 中字面值常量和字面值型別

乙個形如42的值被稱為字面值常量。字面值常量的形式和值決定了常量的型別。例如0x42是16進製表示的整型常量。a 是char型字面值。字面值常量顧名思義由字面意思表示,是常量。字面值常量在程式中是直接表示的,整型直接寫出大小,字元直接寫出字元。乙個字面值常量在編譯時被直接解析為立即數,編譯器內部維護...