逗号运算符如何在C++中工作?
例如,如果我这样做:
a = b, c;
Run Code Online (Sandbox Code Playgroud)
最终是否等于b或c?
(是的,我知道这很容易测试 - 只是在这里记录,以便有人快速找到答案.)
更新: 此问题在使用逗号运算符时暴露了细微差别.只是记录下来:
a = b, c; // a is set to the value of b!
a = (b, c); // a is set to the value of c!
Run Code Online (Sandbox Code Playgroud)
这个问题实际上是受到代码中的拼写错误的启发.打算做什么
a = b;
c = d;
Run Code Online (Sandbox Code Playgroud)
转换成
a = b, // <- Note comma typo!
c = d;
Run Code Online (Sandbox Code Playgroud) 我总是认为,如果我声明这三个变量,它们都将具有值0
int column, row, index = 0;
Run Code Online (Sandbox Code Playgroud)
但我发现只有索引等于零而其他的都是垃圾,如844553和2423445.
如何在不声明新行的每个变量的情况下将所有这些变量初始化为零?
这似乎是一个简单的问题,但是我没有用我自己的风格检查过多少年......当初始化用逗号分隔的变量时,我认为以下是不安全的做法:
unsigned int n = foo.size, nxn = n * n;
因为我实际上并没有使用逗号运算符作为语法糖等; 而是表明两个表达式是独立的 - 作为对'细粒度并行'(或表达式独立性)的一种隐式评论,通常会使代码更简洁,例如,
if (<some condition>)
a = true, b = value;
Run Code Online (Sandbox Code Playgroud)
而不是要求{}分号分隔表达式的范围.
但我的问题是重新检查变量初始化的情况.我的假设是不正确的,nxn不能依赖于按预期初始化?或者我一直在误解?