这似乎是一个简单的问题,但是我没有按照自己的风格检查年龄……初始化由逗号分隔的变量时,我认为以下是不安全的做法:
unsigned int n = foo.size, nxn = n * n;
因为我从未真正使用逗号 operator 来表示语法糖等;而是表示两个表达式是独立的-作为对“细粒度并行性”(或表达式独立性)的一种隐式注释,这通常会使代码更加简洁,例如
if (<some condition>)
a = true, b = value;
而不是使用{}
范围来使用分号分隔的表达式。
但是我的问题确实是在重新检查变量初始化情况。我不能正确地假设nxn
不能被初始化吗?还是我一直在误解中工作?
答案 0 :(得分:8)
声明中的每个 init-declarator 都被单独分析,就好像它本身在声明中一样。 [...]
我们明白了
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;
并为安全起见支付额外的按键。
答案 1 :(得分:3)
nxn
将正确初始化,因为已经定义n
并在定义nxn
的位置对其进行了初始化。
但是,为清楚起见,最好将变量放在单独的行上。这样做避免了模棱两可,使您的意图对于任何阅读您的代码的人来说都更加清楚。