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確實(shí)是比較難以讓人理解。加之其在C++11和14中的標(biāo)準(zhǔn)略有不同,也加劇了這種難度。
參考幾本經(jīng)典教材(C++ primer, effective modern C++, a tour of C++)以及藍(lán)色大大在知乎上的一些解答,整理出constexpr的用法和注意事項(xiàng)。
1.概念,constexpr objects
C++ primer中給出的定義是 “常量表達(dá)式是指不會(huì)改變并且在編譯過程中就能得到計(jì)算結(jié)果的表達(dá)式 【1】?!?/p>
可以理解為在const上又加一層限定條件,即const并不限定是編譯期常量還是運(yùn)行期常量,而constexpr必須是編譯期常量(在編譯階段得到結(jié)果)。
舉例如下:
眾所周知,array的size是需要在編譯期確定的,所以當(dāng)其size不是一個(gè)常量表達(dá)式時(shí),是無法通過編譯的。
網(wǎng)友評(píng)論