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