逗号分隔变量定义中关系前的序列

Sequence-before relation in comma-separated variable definitions

本文关键字:关系 分隔 变量 定义      更新时间:2023-10-16

让我们从以下示例代码开始:

int a = 0, b = a++, c = a;

a++是否在a之前(在c = a内)测序?a++a似乎符合全表达式的条件,根据cpprreference(规则1),答案应该是肯定的。但我不确定。

是。正如Brian所指出的,这不是逗号运算符,而是init声明符列表。从[dcl.dell]我们有:

声明中的每个init声明符都被单独分析,就好像它本身在声明中一样。

有一个脚注澄清:

具有多个声明符的声明通常等价于相应的声明序列,每个声明序列都有一个声明人。那是

T D1, D2, ... Dn;

通常相当于

T D1; T D2; ... T Dn;

其中Tdecl说明符seq,并且每个Diinit声明符

有两个例外,一个用于隐藏类型的名称,另一个用于auto,两者都不适用。因此,最终,您拥有的代码完全等同于:

int a = 0;
int b = a++;
int c = a;

首先你应该更喜欢写这篇文章,因为它不需要搜索标准来确保你做的是有效的!