3 回答
TA贡献1765条经验 获得超5个赞
我看不出技术原因
struct type {
static const double value = 3.14;
};
是禁止的。您发现它可以工作的任何地方都是由于非便携式实现定义的功能。它们似乎也只有有限的用途。对于在类定义中初始化的整数常量,可以使用它们并将它们作为非类型参数传递给模板,并将它们用作数组尺寸的大小。但是对于浮点常量,您不能这样做。允许浮点模板参数会带来它自己的规则集,这确实不值得麻烦。
但是,下一个C ++版本将允许使用constexpr:
struct type {
static constexpr double value = 3.14;
static constexpr double value_as_function() { return 3.14; }
};
并且会做出type::value一个常量表达式。同时,最好的选择是遵循以下模式std::numeric_limits:
struct type {
static double value() { return 3.14; }
};
它不会返回常量表达式(在编译时未知值),但这仅在理论上重要,因为实际情况下无论如何都将内联该值。请参阅constexpr建议。它包含
4.4
Floating-point constant expressions
传统上,在编译时评估浮点常量表达式是一个棘手的问题。为了统一性和通用性,我们建议允许使用任何浮点常量表达式初始化的浮点类型的常量表达式数据。这还将增强与C99 [ISO99,§6.6]的兼容性,从而允许
[#5]在多种情况下都需要一个计算结果为常量的表达式。如果在翻译环境中评估浮动表达式,则算术精度和范围至少应与在执行环境中评估表达式一样大。
- 3 回答
- 0 关注
- 557 浏览
添加回答
举报