这似乎是一个简单的问题,但我已经很久没有以自己的方式检查过这个问题了……当初始化用逗号分隔的变量时,我假设以下是不安全的做法:
unsigned int n = foo.size, nxn = n * n;
因为我从来没有真正使用逗号运算符来表示句法糖等;而是表明两个表达式是独立的——作为一种对“细粒度并行性”(或表达式独立性)的隐式注释,这通常会使代码更简洁,例如,
if (<some condition>)
a = true, b = value;
而不是为分号分隔的表达式要求 {}
范围。
但我的问题实际上是重新检查变量初始化的情况。我的假设是否不正确 nxn
不能依赖于按预期进行初始化?还是我一直都在误解中苦苦挣扎?
最佳答案
根据 [dcl.decl]/3
Each init-declarator in a declaration is analyzed separately as if it was in a declaration by itself. [...]
我们明白了
unsigned int n = foo.size, nxn = n * n;
与
相同unsigned int n = foo.size;
unsigned int nxn = n * n;
对于其他规则(例如 auto
)或者如果名称遮盖了类型但这些规则不适用于这种情况,有一条注释。
如果将多个变量放在一行中,请谨慎使用指针
int * foo, bar;
不给你两点指点。相反,foo
是一个指针,而 bar
是一个 int
。你需要
int * foo, * bar;
得到两个指针。出于这个原因,我更愿意使用
int * foo;
int * bar;
并为安全起见支付额外的击键费用。
关于c++ - 逗号作为变量初始化中的分隔符(不是作为运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54200314/