我在 Boost 文档的示例中遇到了这段代码:
std::vector<int> input;
input += 1,2,3,4,5,6,7,8,9;
真可爱。 Boost 有一个 operator+= 的模板,它利用了逗号在大多数情况下是一个运算符这一事实。 (明智的做法是,C++ 不允许黑客重载“operator,”。)
我也喜欢写可爱的代码,所以我尝试了一些逗号运算符。我发现了一些对我来说很奇怪的东西。你认为下面的代码会打印出什么?
#include <iostream>
int main() {
int i;
i = 1,2;
std::cout << i << ' ';
i = (1,2);
std::cout << i << std::endl;
}
你猜对了。 VC++ 2012 打印“1、2”。这是怎么回事?
[编辑:我应该更准确。应该说 C++ 不允许重载 int 列表中的运算符“,”。或者更好的是,什么都没有。可以为类和枚举重载 ',' 运算符。]
最佳答案
案例 1:
i = 1,2;
=
的优先级高于 ,
因此,1
被分配给 i
。
由于赋值在 c++
中计算为 lvalue
,(在 c
中计算为 rvalue
)它变成了 i,2
计算结果为2
(引用注释)
案例 2:
i = (1,2);
()
的优先级高于 =
expressions
或 operands
由 分隔,
运算符计算最后一个 expression
或 的值操作数
因此,2
被分配给i
注意
像 33,77,x,y,z
这样的 comma expression
是从从左到右求值的。
这样的逗号表达式的结果是最右边的表达式的值。
例子
Consider, int z=100;
then
1,4,5; //evaluates to 5
1,100,z+100; //evaluates to 200
关于c++ - C/C++ 逗号运算符让我困惑。语言律师?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732454/