首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++11标准中,何时可以在转换过程中对常量表达式函数求值?

在C++11标准中,何时可以在转换过程中对常量表达式函数求值?
EN

Stack Overflow用户
提问于 2012-11-27 03:30:07
回答 4查看 704关注 0票数 18

仅仅因为一个函数(或构造函数)...

  • 声明为constexpr,并将其声明为
  • 函数定义满足constexpr要求

...并不意味着编译器将在翻译过程中计算constexpr函数。我一直在浏览C++11 FDIS (N3242,在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/上可以找到),试图确定两件事:

在translation?

  • When期间编译器必须计算常量表达式函数时允许编译器在translation?

期间计算常量表达式函数

第5.19节第1段说,常量表达式可以在翻译过程中进行计算。据我所知,第5.19节的其余部分阐述了在常量表达式函数的定义中什么是有效的规则。

我知道,我可以在转换过程中通过将constexpr函数的结果声明为constexpr来强制对其求值。如下所示:

代码语言:javascript
复制
// 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函数的其他情况

我特别感兴趣的是,翻译过程中的常量计算是否由以下因素触发:

当传递给constexpr函数的所有参数都是文字时为

  1. ,或者
  2. 重载解析期间隐含的对象参数(第13.3.1节第3段)要么是constexpr,要么需要文字(例如对于数组维度),或者是完全不同的

如果可能,请在您的回复中引用FDIS中我可以查找的部分或我可以在FDIS中搜索的关键短语。标准中的英文有些生涩,所以我可能一直在阅读相关段落,完全忽略了它们的意思或意图。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13571749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档