逗号作为变量初始化的分隔符(不作为运算符)

Bre*_*ale 8 c c++ variables initialization comma

这似乎是一个简单的问题,但是我没有用我自己的风格检查过多少年......当初始化用逗号分隔的变量时,我认为以下是不安全的做法:

unsigned int n = foo.size, nxn = n * n;

因为我实际上并没有使用逗号运算符作为语法糖等; 而是表明两个表达式是独立的 - 作为对'细粒度并行'(或表达式独立性)的一种隐式评论,通常会使代码更简洁,例如,

if (<some condition>)
    a = true, b = value;
Run Code Online (Sandbox Code Playgroud)

而不是要求{}分号分隔表达式的范围.

但我的问题是重新检查变量初始化的情况.我的假设是不正确的,nxn不能依赖于按预期初始化?或者我一直在误解?

Nat*_*ica 8

[dcl.decl]/3

声明中的每个init-declarator都会被单独分析,就好像它本身就在声明中一样.[...]

我们明白了

unsigned int n = foo.size, nxn = n * n;
Run Code Online (Sandbox Code Playgroud)

是相同的

unsigned int n = foo.size;
unsigned int nxn = n * n;
Run Code Online (Sandbox Code Playgroud)

有一个注释,其他规则有例外,auto如果名称影响类型,但在这种情况下不适用.


如果将多个变量放在一行上,请对指针保持警惕

int * foo, bar;
Run Code Online (Sandbox Code Playgroud)

不会给你两个指针.相反,foo是一个指针,bar是一个int.你需要

int * foo, * bar;
Run Code Online (Sandbox Code Playgroud)

得到两个指针.出于这个原因,我更愿意使用

int * foo;
int * bar;
Run Code Online (Sandbox Code Playgroud)

并为安全起见支付额外的keystorkes.