EffectiveModernCppChinese/3.MovingToModernCpp/item15.md
2018-11-02 21:53:39 +08:00

1.6 KiB
Raw Blame History

Item 15:尽可能的使用constexpr

条款 15:尽可能的使用constexpr

如果要颁一个C++11中最令人困惑的词的奖constexpr可能会赢得这个奖。当用于对象上面,它本质上就是const的加强形式,但是用于函数上,它就有不同的意思了。斩断困惑是值得的做的,因为当constexpr符合你想表达的东西,你绝对会想用它。

从概念上来说,constexpr指示一个值不仅仅是常量,它还是编译期可知的。这个概念只 是故事的一部分,因为当constexpr被用于函数的时候,事情就有一些细微差别了。 为了避免我毁了结局带来的surprise我现在只想说你不能假设constexpr函数是const,也不能保证它们的(译注:返回)值是在编译期可知的。最有意思的是,这些是特性。关于constexpr函数返回的结果不需要是const,也不需要编译期可知这一点是良好的行为。

不过我们还是先从constexpr对象开始说起。这些对象,实际上,和const一样它们是编译期可知的。专业来说它们的值在翻译期translation决议所谓翻译不仅仅包含是编译compilation也包含链接linking除非你准备写C++的编译器和链接器,否则这些对你不会造成影响,所以你编程时无需担心,把这些constexpr对象值看做编译期决议也无妨的。)

编译期可知的值是保密的。它们可能被放到只读存储空间中,尤其是对于那些嵌入式系统的开发者,这个特性是相当重要的。