逗号作为变量初始化中的分隔符(不是作为运算符)
Comma as separator in variable initialization (not as operator)
这似乎是一个简单的问题,但我已经很久没有以自己的方式检查过...在初始化用逗号分隔的变量时,我假设以下是不安全的做法:
unsigned int n = foo.size, nxn = n * n;
因为我从来没有真正使用逗号 operator 作为句法糖等;而是表明两个表达式是独立的——作为对 'fine-grained parallelism'(或表达式独立性)的一种隐式注释,这通常会使代码更简洁一些,例如,
if (<some condition>)
a = true, b = value;
而不是要求 {}
分号分隔表达式的范围。
但我的问题实际上是重新检查变量初始化的情况。我的假设是否正确 nxn
不能依赖于按预期进行初始化?还是我一直在误解中苦苦挣扎?
nxn
将正确初始化,因为 n
已在定义 nxn
的位置进行定义和初始化。
然而,为了清楚起见,最好将变量放在不同的行中。这样做可以避免歧义,让阅读您代码的任何人都更加清楚您的意图。
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;
并为安全起见支付额外的击键费用。
这似乎是一个简单的问题,但我已经很久没有以自己的方式检查过...在初始化用逗号分隔的变量时,我假设以下是不安全的做法:
unsigned int n = foo.size, nxn = n * n;
因为我从来没有真正使用逗号 operator 作为句法糖等;而是表明两个表达式是独立的——作为对 'fine-grained parallelism'(或表达式独立性)的一种隐式注释,这通常会使代码更简洁一些,例如,
if (<some condition>)
a = true, b = value;
而不是要求 {}
分号分隔表达式的范围。
但我的问题实际上是重新检查变量初始化的情况。我的假设是否正确 nxn
不能依赖于按预期进行初始化?还是我一直在误解中苦苦挣扎?
nxn
将正确初始化,因为 n
已在定义 nxn
的位置进行定义和初始化。
然而,为了清楚起见,最好将变量放在不同的行中。这样做可以避免歧义,让阅读您代码的任何人都更加清楚您的意图。
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;
并为安全起见支付额外的击键费用。