常数表达式是否可以是双类型而不是仅为整数? 从《C++底漆,第四》中,有一个句子

常数表达式是否可以是双类型而不是仅为整数? 从《C++底漆,第四》中,有一个句子,c++,C++,常量表达式是编译器可以在编译时计算的整型表达式 双精度、长类型不合适?字符串常量适用,如: 常量std::字符串s(“这是一个常量表达式”) 而且 常数双x(0.25) 其中x是一个常量双精度表达式,0.25是一个常量表达式。根据page,您可以创建任何类型的constepr,该类型具有一个普通析构函数,或者是一个聚合,或者具有constepr构造函数,前提是这对每个基类都适用。换句话说,除了遵循规则的用户定义类型之外,任何基元类型都可以是 因此,是的,您可以将constexpr表达式的类型设置

常量表达式是编译器可以在编译时计算的整型表达式


双精度、长类型不合适?

字符串常量适用,如:

常量std::字符串s(“这是一个常量表达式”)

而且

常数双x(0.25)

其中x是一个常量双精度表达式,0.25是一个常量表达式。

根据page,您可以创建任何类型的
constepr
,该类型具有一个普通析构函数,或者是一个聚合,或者具有
constepr
构造函数,前提是这对每个基类都适用。换句话说,除了遵循规则的用户定义类型之外,任何基元类型都可以是


因此,是的,您可以将
constexpr
表达式的类型设置为
double
long
是一种整数类型,因此本书没有挑战其
constexpr
-ness)

在许多情况下,常量必须是整型常量,而浮点常量则不行。请注意,
long
是一种积分类型;它不是
int
类型。因此,只有整型才可以?它取决于上下文;如果我对句子所在的段落没有更多的了解,我就不想再多说了。如果讨论进入
constexpr
,我就更不愿意发言了。我发表评论是有原因的;我不确定这是否足以作为一个答案。我认为它基本上是有效的,但我不确定它是否绝对有效。@redd不,常量表达式也可以是其他类型的,但常量表达式通常用于表示某事物的大小,因此它们通常是整型的。然而,情况并非总是如此,因此这本书断言这是完全错误的。
const
constepr
之间存在巨大差异。OP谈论的是
constepr
,而不是
const
。您正在创建
const
对象,而不是
constepr
s。两者都有,常量表达式用于初始化这些const对象,不是吗?他们询问double是否可用,这里我展示了double和string常量表达式。此外,类似const int n;可以用作定义模板时的常量表达式,例如T,在这种情况下,n是常量表达式。这不是真的。
constexpr
必须在编译时可计算。
const
不需要额外的约束。
const
变量不需要在编译时可计算。唯一的要求是变量必须是
const
,即它已初始化(可以在运行时完成),并且在此之后其值不能更改。抱歉,R Sahu,我有一条注释已开始,并在此处被中断,删除了它…再次开始:有关参考,请查看cppreference.com中的常量表达式。在漫长而详细的讨论中,他们给出了一个例子:const int cn;std::数组a;在本例中,cn是一个constexpr,其中std:array需要一个整数,cn作为一个constexpr就足够了。此外,OP询问双长类型是否不正常,因为它们可以在编译时进行计算。OP可能认为整数类型意味着整数,但事实并非如此。它包括long、double、char等类型。