c++ - 逗号运算符如何工作

标签 c++ comma-operator

逗号运算符在 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;

最佳答案

请注意逗号运算符可能在 C++ 中被重载。因此,实际行为可能与预期大相径庭。

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

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

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

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

也就是说,第一个调用的操作符是 keywords.operator =("and"),它返回一个代理对象,其余的 operator, 都在该代理对象上被调用:

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

关于c++ - 逗号运算符如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54142/

相关文章:

c++ - 相当于智能指针

c++ - 在赋值中使用 block() 收缩具有 Eigen 的矩阵

c++ - 二叉搜索树 - 按两个数据项排序

c++ - g++ 4.9 拒绝 C++14 中的有效聚合初始化

c++ - for循环的初始化和增量部分中的逗号如何工作?

c - 从左到右评估 for 循环内的语句,用逗号分隔

c++ - 强制调用基类虚函数

c++ - move 由逗号运算符抑制的构造函数

c++ - 不寻常的编译器错误转换为无效?

c++ - 为什么这段代码在 VS 中编译? ("extra"逗号)