c - C 常量表达式。const 变量作为常量表达式
问题描述
根据 6.6.10
10 一个实现可以接受其他形式的常量表达式。
实现可能会考虑const
(或者甚至不const
作为答案关注它 - 但它不是问题的核心)变量作为常量表达式。
我的逻辑正确吗?如果不是为什么?
一些例子:
//file scope
int a = 5;
const int b = 10;
int c[a];
int d[b];
IMO 均符合要求。它们可以评估编译时间。该值是已知的,并且静态数组的大小已知编译时间。
volatile int x = 5; //cannot be considered as known compile time. ????
void foo(int a)
{
static int b[a];
}
在这个例子a
中不能评估编译时间 - 所以它不能用作常量表达式
解决方案
const
常量表达式与限定符没有任何关系。整数常量表达式的定义见 6.6/6。
6.6/10 参考同一章的前面部分,谈到整数常量表达式、初始化器中的常量表达式等。我相信引用的部分是指各种极端情况表达式,例如:
static int x;
static int y = (int)&x;
这不是严格符合的,因为&x
它不被视为整数常量表达式,而是地址常量。gcc 和 clang 都不接受它。我相信 6.6/10 允许编译器支持像上面示例这样的代码作为实现定义的扩展。
推荐阅读
- java - 加载资源失败:此服务器的证书无效
- gpu - fastai ulmfit 模型在 cuda 机器上为 cpu 训练
- python - 在 Pandas 中查找每个元素都是 numpy 数组的列的标准差
- scala - 未解决对 Scala 2.11.9 的光滑依赖
- google-apps-script - 我可以使用表单字段重命名使用 googlescript 上传的 pdf 或 doc 吗?
- android - event.preventDefault() 在 android 上停止 chrome 中的所有 javascript
- r - 如何找到在错误消息中指示 NA 或 NaN 的参数?
- javascript - ace.edit 在 mat-tab 中找不到 div #javascript-editor
- php - 未定义的索引:php数组上的id
- reactjs - 如何使用 Apollo graphql HOC 执行多个查询?