【发布时间】:2019-06-09 13:13:29
【问题描述】:
这似乎是一个如此简单的问题,但我已经很久没有以自己的风格研究过......当初始化用逗号分隔的变量时,我认为以下做法是不安全的做法:
unsigned int n = foo.size, nxn = n * n;
因为我从来没有真正使用逗号运算符作为语法糖等;而是表明两个表达式是独立的——作为对“细粒度并行性”(或表达式独立性)的一种隐含评论,这通常会使代码更简洁,例如,
if (<some condition>)
a = true, b = value;
而不是要求{} 范围用于分号分隔的表达式。
但我的问题实际上是重新检查变量初始化案例。我是否不正确地假设 nxn 不能按预期进行初始化?还是我一直在被误解下苦苦挣扎?
【问题讨论】:
-
如有疑问,请始终使用更安全的方法 :)
-
根据this declarator reference,声明列表是完全从左到右的,包括初始化。简而言之,
unsigned int n = foo.size, nxn = n * n;等价于unsigned int n = foo.siz; unsigned int nxn = n * n; -
使用逗号的一个可能缺点是您可能会与
int* a, b之类的语句混淆。这看起来像两个变量都是int*类型,但实际上我们得到int* a; int b; -
@grapes - 是的。我还担心可读性(我不会走这样的捷径,因为它往往会减慢读者的速度)。
标签: c++ c variables initialization comma