问题标签 [constant-expression]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 枚举类型值作为 C++ 中数组的长度
众所周知,C++中的数组长度是必须确定的。然后我们可以使用:
或者:
在编译之前确定数组的长度。但是,当我阅读 lippman 的《c++ Primer》一书时,在第 5 版的第 3.5.1 章中,它说:数组的长度必须是一个常量表达式。那么问题来了:
代码在mingw32-g++中编译成功。但是在VS2008中失败了,错误是:
而且我认为枚举值是恒定的,所以它应该用作数组的长度。正确的?
我很困惑,你能帮帮我吗?谢谢你。
java - Switch 中的静态最终整数:为什么不能这样做?
我在图书馆项目中有一个 Switch 引用来自 R.java 的资源 ID:
从 ADT 14 开始,R 字段不再是最终的,因此 Google 建议将 switch 更改为嵌套 if。很公平。
但是,我想知道为什么这不起作用:
或这个:
他们都抱怨错误“Case statements must be constant expressions”......不是吗,特别是第一个?无论 R.id.xxx 可能是哪个值,我不是将其“最终化”为快照常量吗?
c++ - 数组可以在编译时被索引吗?
在对另一个问题的评论中,用户 hvd 陈述了以下内容:
...虽然可以将字符串文字传递给
constexpr
函数,并且在常量表达式中允许对字符串文字进行数组索引,但对constexpr
函数参数的索引操作不符合常量表达式的条件。
我没有完全理解是什么意思。是不是意味着hash_value
下面代码中的变量
无法在编译时评估?您能否详细说明引用的评论并判断我是否正确?
c++ - C++11 之前的“常量表达式”
该constexpr
关键字是在 C++11 中引入的,因为(我认为)是“常量表达式”的相应概念。然而,这个概念隐含在 C++98/c++03 中,因为数组声明需要一个常量表达式:
还有其他“常量表达式”,即可以(和/或必须)在编译时评估的表达式;一个例子是模板参数。
对于 C++11 之前的版本,C++98/03 标准或其他地方是否存在以下内容?
- 需要常量表达式的语法结构的完整列表(例如数组声明和模板实例化)
- 管理此类常量表达式的规则(大概这只是从上面列表中的项目到标准中的定义的映射)
c - 在 #if 和 #elif 的表达式中,名称的“已定义”前缀是什么,以及标识符(包括 C 关键字)被 0 替换是什么?
我试图绕过它但放弃了。您能否解释以下内容,摘自 Mike Banahan 的 C 书(第 7.3.7 节条件编译)。尽管付出了很多努力,但我无法掌握“组成的令牌序列......”之后的部分。你能简单地说一下吗
1)“定义的”前缀究竟是什么,以及
2) 名称甚至 C 关键字减少到零(不要忘记对 sizeof 的混淆引用)怎么办?
用一小段代码进行解释将非常有帮助。谢谢你。
#if 和 #elif 构造将单个整数常量表达式作为其参数。预处理器整型常量表达式与其他整型常量表达式相同,只是它们不能包含强制转换运算符。构成常量表达式的记号序列会进行宏替换,但以定义为前缀的名称不会被扩展。在此上下文中,如果当前定义了NAME,则表达式定义的 NAME或定义的 ( NAME )计算结果为 1 ,否则计算结果为0。表达式中的任何其他标识符,包括那些是 C 关键字的标识符替换为值 0。然后计算表达式。甚至替换关键字意味着不能在这些表达式中使用 sizeof 来获得您通常期望的结果。
c - const 变量不能在常量表达式中使用?
为什么这个 C 代码在 Visual Studio 2013 Ultimate 中是非法的?
它给error C2057: expected constant expression
.
原始问题
我完全被这个迷惑了。
相关功能:
错误信息:error C2057: expected constant expression
在线的char resultBufNative[size+1];
对我来说,这使得相关代码如下:
显然,const size_t + 1
不是一个常量表达式。
没有定义或宏size
在讨论(用 xyzabc 替换它会产生相同的错误)。size_t
定义为typedef unsigned int __w64 size_t
当我size_t
在 IDE(Visual Studio Ultimate 2013)中鼠标悬停时。
在 C2057 预期的常量表达式错误之后,编译器又给出了 2 个错误:
对于同一行代码。自然,这些是因为它不知道是什么size + 1
,所以它变成了0。
使用
给error C2065: 'constexpr' : undeclared identifier
.
使用
给error C2057: expected constant expression
.
使用
给error C2057: expected constant expression
.
使用
给error C2057: expected constant expression
.
我想我想做的事情不受支持。
c++ - 使用变量创建数组
我有以下代码:
我明白了
错误 C2057:预期的常量表达式
好的,如何在没有向量或动态分配数组的情况下创建代码中所示的矩阵?
c++ - N4140 的要点 §5.19/2.3 中的“未定义”一词是什么意思?
来自N4140 §5.19/2.3(强调我的)
— 调用未定义的constexpr 函数或 未定义的constexpr 构造函数;
从 §7.1.5/2 开始,constexpr 函数和构造函数被隐式内联,也就是说,如果 constexpr 函数未在 TU 中定义,则代码将无法编译。
f# - f# 中的参数化测试 - 这不是有效的常量表达式
由于某种原因,当通过TestCase
attrubute 将参数传递给测试时,我收到以下关于第一个参数的错误消息,在本例中是一个数组:
这不是有效的常量表达式或自定义属性值
但是,当从属性和方法本身中删除最后一个参数时,一切正常。
我究竟做错了什么?最好我也会定义一个元组,int * int
但它似乎也不起作用。