if 子句中的赋值不起作用
Assignment in if clause has no effect
考虑以下代码(我意识到这是不好的做法,只是好奇为什么会发生这种情况(:
#include <iostream>
int main() {
bool show = false;
int output = 3;
if (show = output || show)
std::cout << output << std::endl;
std::cout << "show: " << show << std::endl;
output = 0;
if (show = output || show)
std::cout << output << std::endl;
std::cout << "show: " << show << std::endl;
return 0;
}
这打印
3
show: 1
0
show: 1
因此,在第二个if子句中,output
的分配实际上并没有发生,这是0
的。如果我像这样重写代码:
#include <iostream>
int main() {
bool show = false;
int output = 3;
if (show = output || show)
std::cout << output << std::endl;
std::cout << "show: " << show << std::endl;
output = 0;
if (show = output) // no more || show
std::cout << output << std::endl;
std::cout << "show: " << show << std::endl;
return 0;
}
正如我所期望的那样,它输出:
3
show: 1
show: 0
谁能解释一下这里到底发生了什么?为什么在第一个例子的第二个 if 子句中没有将output
分配给show
?我在Windows 10上使用Visual Studio 2017 Toolchain。
这与运算符优先级有关。您的代码:
if (show = output || show)
与
if (show = (output || show))
如果更改顺序,结果将更改:
if ((show = output) || show)
使用类似于上面的 if 语句,它打印:
3
show: 1
show: 0
赋值不会发生,因为 || 运算符的运算符优先级高于赋值运算符。您分配输出 ||显示哪个是 0 || 真,在第二个 if 中计算为 true。
相关文章:
- if 子句中的赋值不起作用
- 检查字符串中的小写字符或空格.布尔值不起作用
- 赋值不起作用,但带有取消引用运算符的地址起作用?
- 更改生成文件中变量的值不起作用
- 更新对象中的值不起作用
- 重新赋值在运算符中不起作用 = 重载
- C++开关语句.默认值不起作用
- C++中的变量赋值(使用libpng)不起作用
- 交换堆栈的 2 个值不起作用
- C++:STL 映射,插入新值不起作用
- C++ int 赋值不起作用
- C++赋值 boost::p ython::object 不起作用。为什么?
- 字符赋值数组不起作用
- QString到std::string到const char*的转换在赋值中不起作用
- 为什么函数头的更改会导致指针赋值不起作用
- 使用c++数学比较函数返回值不起作用
- 返回智能指针并为其分配值不起作用
- 对指向std::list类型的共享指针赋值不起作用
- 如何从标准字符串 (c_str()) 中设置字符 * 值不起作用
- 直接设置结构 tm 属性的值不起作用