C++任务 - 时尚还是性能?

joe*_*jax 11 c variable-assignment

在编写Java代码多年之后,当我看到这个C++语句时,我感到很惊讶:

int a,b;
int c = (a=1, b=a+2, b*3);
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是编码风格的选择,还是有真正的好处?(我正在寻找一个实用的用例)

我认为编译器会看到它与以下内容相同:

int a=1, b=a+2;
int c = b*3;
Run Code Online (Sandbox Code Playgroud)

(这是什么官方名称?我认为它是标准的C/C++语法.)

Mat*_*hen 17

这是逗号运算符,使用了两次.你对结果是正确的,我没有看到以这种方式使用它的重点.


Mac*_*ehl 9

看起来像一个(逗号)运算符的模糊使用.

它不是用C++做事的代表性方式.


Kri*_*son 6

逗号运算符的唯一"好样式"用法可能是在for具有多个循环变量的语句中,使用如下所示:

// Copy from source buffer to destination buffer until we see a zero
for (char *src = source, *dst = dest; *src != 0; ++src, ++dst) {
    *dst = *src;
}
Run Code Online (Sandbox Code Playgroud)

我把"好风格"放在恐慌引号中,因为几乎总有比使用逗号运算符更好的方法.

我想看到这个的另一个上下文是使用三元运算符,当你想要有多个副作用时,例如,

bool didStuff = DoWeNeedToDoStuff() ? (Foo(), Bar(), Baz(), true) : false;
Run Code Online (Sandbox Code Playgroud)

再次,有更好的方式来表达这种事情.这些成语是我们只能在我们的显示器上看到24行文字的日子,并且在每行中挤压很多东西具有一些实际重要性.