小编典典

逗号运算符如何工作

all

逗号运算符在 C++ 中如何工作?

例如,如果我这样做:

a = b, c;  

a最终等于b还是c?

(是的,我知道这很容易测试 - 只需在此处记录以供某人快速找到答案。)

更新: 这个问题暴露了使用逗号运算符时的细微差别。只是为了记录这一点:

a = b, c;    // a is set to the value of b!

a = (b, c);  // a is set to the value of c!

这个问题实际上是受到代码中的错字的启发。本来打算是什么

a = b;
c = d;

转换成

a = b,    //  <-  Note comma typo!
c = d;

阅读 59

收藏
2022-07-18

共1个答案

小编典典

注意逗号运算符可能在 C++ 中被重载。因此,实际行为可能与预期的非常不同。

例如,Boost.Spirit非常巧妙地使用逗号运算符来实现符号表的列表初始值设定项。因此,它使以下语法成为可能且有意义:

keywords = "and", "or", "not", "xor";

请注意,由于运算符优先级,代码(故意!)与

(((keywords = "and"), "or"), "not"), "xor";

也就是说,调用的第一个运算符 iskeywords.operator =("and")返回一个代理对象,在该对象上调用剩余operator,的 s:

keywords.operator =("and").operator ,("or").operator ,("not").operator ,("xor");
2022-07-18