仅仅因为一个函数(或构造函数)...
将
...并不意味着编译器将在翻译过程中计算constexpr函数。我一直在浏览C++11 FDIS (N3242,在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/上可以找到),试图确定两件事:
在translation?
期间计算常量表达式函数
第5.19节第1段说,常量表达式可以在翻译过程中进行计算。据我所知,第5.19节的其余部分阐述了在常量表达式函数的定义中什么是有效的规则。
我知道,我可以在转换过程中通过将constexpr函数的结果声明为constexpr来强制对其求值。如下所示:
// Declaration
constexpr double eulers_num() { return 2.718281828459045235360287471; }
// Forced evaluation during translation
constexpr double twoEulers = eulers_num() * 2.0;
static_assert(twoEulers > 5.0, "Yipes!");
到目前为止,我在FDIS中找不到这样的段落:
twoEulers
或我特别感兴趣的是,翻译过程中的常量计算是否由以下因素触发:
当传递给constexpr函数的所有参数都是文字时为
如果可能,请在您的回复中引用FDIS中我可以查找的部分或我可以在FDIS中搜索的关键短语。标准中的英文有些生涩,所以我可能一直在阅读相关段落,完全忽略了它们的意思或意图。
https://stackoverflow.com/questions/13571749
复制相似问题