Scott Meyers在effective modern c++中提到“If there were an award for the most confusing new word in C++11, constexpr would probably win it.”

由此可見,constexpr確實是比較難以讓人理解。加之其在C++11和14中的標準略有不同,也加劇了這種難度。

參考幾本經(jīng)典教材(C++ primer, effective modern C++, a tour of C++)以及藍色大大在知乎上的一些解答,整理出constexpr的用法和注意事項。

1.概念,constexpr objects

C++ primer中給出的定義是 “常量表達式是指不會改變并且在編譯過程中就能得到計算結(jié)果的表達式 【1】?!?/p>

可以理解為在const上又加一層限定條件,即const并不限定是編譯期常量還是運行期常量,而constexpr必須是編譯期常量(在編譯階段得到結(jié)果)

舉例如下:

眾所周知,array的size是需要在編譯期確定的,所以當(dāng)其size不是一個常量表達式時,是無法通過編譯的。

        		

網(wǎng)友評論