为何C标准n3301中常量表达式要求未区分是否被求值?
关于C标准常量表达式与短路求值的疑问
n3301文档相关条款
6.6节「常量表达式」第4款
每个常量表达式应求值为其类型可表示范围内的常量。
6.5.15节「逻辑或运算符」第4款
若第一个操作数不等于0,则不计算第二个操作数。
核心疑问
为何第一条要求未关联常量表达式是否被求值(或不被求值)的规则?
换句话说:为何标准表述为「每个常量表达式应求值为...」而非「每个被求值的常量表达式应求值为...」?这是否属于疏漏?
提问背景
部分观点认为「每个常量表达式应求值为...」的优先级高于「不计算第二个操作数」的规则。
n3301文档存在脚注119:
- 因此,在如下初始化中:
static int i = 2 || 1 / 0;该表达式是值为1的有效整数常量表达式。
需注意:在ISO标准中,注释均不具备规范性。
内容的提问来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

