常数表达式是否可以是双类型而不是仅为整数? 从《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::数组