据我所知,C++从左到右工作.例如,如果我这样做:
std::cout << "output" << "stream";
Run Code Online (Sandbox Code Playgroud)
C++首先从最左边的东西(std :: cout)开始,然后是<<运算符,它取右边的字符串文字("输出")并将它放到运算符左边的对象(std :: COUT).然后C++返回运算符左侧的对象(std :: cout),然后继续代码,另一个<<运算符.
"="运算符返回什么?
如果我做
double wage = 5;
double salary = wage = 9999.99;
Run Code Online (Sandbox Code Playgroud)
我认为"="运算符只返回"="的左或右操作数.因此,根据我的逻辑,在工资初始化的行中,工资用工资值初始化,然后"="运算符返回工资或工资(比如工资),然后它将9999.99分配给工资,但工资是走了,应该保持5的价值.
但是当我在"工资"初始化之后检查"薪水"和"工资"的值时,两者的值都是9999.99.如果我应用与上面使用std :: cout相同的逻辑,那么应该只有一个变量,"salary"或"wage",值为9999.99
Nir*_*man 18
赋值运算符是从右到左的关联,一般来说通过引用返回其左操作数.一般而言,这适用于所有内置类型,我能想到的库类型,以及您希望如何编写赋值运算符.
这意味着
double salary = wage = 9999.99;
Run Code Online (Sandbox Code Playgroud)
完全一样
wage = 9999.99;
double salary = wage;
Run Code Online (Sandbox Code Playgroud)
请注意,在这里的第二行,salary设置为wage,而不是9999.99.区别在这里并不重要,但在某些情况下可能会有所不同.例如(感谢贾斯汀时间):
double salary = --(wage = 9999.99);
Run Code Online (Sandbox Code Playgroud)
salary无论如何,显然得到的值为9998.99,但重要的是要注意这wage一点; 如果赋值返回了正确的参数,那么wage最终仍将是9999.99,因为临时将在工资分配发生后减少.
正如Ben Voigt在下面的评论中指出的那样,虽然我的答案是正确的,但我使用的问题的例子有点误导.这是因为尽管=令牌在相关代码中出现double salary = wage = 9999.99两次,但实际上并未调用赋值两次,而是调用赋值然后构造一个新的double.这个例子会更好地继续如下:
double salary = 0.0;
salary = wage = 9999.99;
Run Code Online (Sandbox Code Playgroud)
现在我们真正链接赋值运算符,我之前关于优先级和返回的所有注释都适用于此处的第二行代码.
| 归档时间: |
|
| 查看次数: |
1867 次 |
| 最近记录: |