我正在努力学习C++.在进行实验时,我输入以下代码,不要指望它能够工作,但希望它会:
int one = 1, two = 2;
one, two = two, one;
cout << "one = " << one << "\n";
cout << "two = " << two << "\n";
Run Code Online (Sandbox Code Playgroud)
令我感到鼓舞的是,编译器没有抱怨,因为这是我喜欢python的主要特性之一,我所学过的大多数编程语言都不匹配 - 在分配之前评估多个表达式的能力结果没有使用临时变量.但是,当我运行它时,我发现这段代码似乎无效.
玩了一下之后,我发现变量two
实际上已经设置了 - 所以,如果我运行这段代码:
one, two = 3, 4;
Run Code Online (Sandbox Code Playgroud)
two
将等于3,但one
不会改变.所以我的问题是,编译器在这个语句中究竟做了什么?我无法为我的生活弄明白.
谢谢,布兰登
C++不支持多赋值python样式,逗号运算符不能执行您的操作:http://en.wikipedia.org/wiki/Comma_operator
如果您为两者分配相同的值one
,two
那么您可以这样做
one = two = 3;
Run Code Online (Sandbox Code Playgroud)
但在你的情况下你并非如此,他们必须分开:
one = 3;
two = 4;
Run Code Online (Sandbox Code Playgroud)
如果要交换值,则必须使用临时第三个变量:
int temp = one;
one = two;
two = temp;
Run Code Online (Sandbox Code Playgroud)
如果我们考虑以下因素:
one, two = 3, 4;
Run Code Online (Sandbox Code Playgroud)
简单的情况是3 ,4;
这里4将被丢弃所以只剩下3个,你就可以了
one, two = 3;
Run Code Online (Sandbox Code Playgroud)
现在你有一个赋值运算符=
,它的优先级高于,
运算符,所以不管在得到之前首先计算one, two
的two = 3;
是什么one, two
:
two = 3;
Run Code Online (Sandbox Code Playgroud)