C++11引入了constexpr(常量表達(dá)式)關(guān)鍵字,與const關(guān)鍵字有所不同。它們的主要區(qū)別如下:
1. const是給變量加上只讀屬性,而constexpr是給變量或函數(shù)加上常量屬性。constexpr變量必須在編譯時(shí)就可以計(jì)算出來,而constexpr函數(shù)的返回值也必須是常量并且在編譯時(shí)必須可以計(jì)算出來。
2. constexpr可以用來定義數(shù)組和結(jié)構(gòu)體等復(fù)雜數(shù)據(jù)類型,而const則只能用來定義單個(gè)變量。
3. constexpr變量通常被用作模板參數(shù),因?yàn)樵诰幾g時(shí)就可以計(jì)算出來,可以用來定義數(shù)組大小和模板參數(shù)等。而const變量不一定在編譯時(shí)就可以計(jì)算出來,不能被用作模板參數(shù)。
4. constexpr支持函數(shù)語義,可以使用條件語句和循環(huán)語句等語句,可以實(shí)現(xiàn)復(fù)雜的計(jì)算。而const只能包含簡(jiǎn)單的賦值語句,不能包含流程控制語句。
綜上所述,constexpr是用來定義常量的關(guān)鍵字,只有在編譯時(shí)就可以計(jì)算出來的值才能用它來定義。而const則是用來定義只讀變量的關(guān)鍵字,它不能用來定義數(shù)組或結(jié)構(gòu)體等復(fù)雜數(shù)據(jù)類型。