c++ - 在流中多次设置值
问题描述
是否可以在单个流中多次设置一个值,例如std::cout
?
例如,下面的代码产生以下输出。
1
0
1
1
1
这让我感到惊讶,因为我期待输出
1
0
1
0
0
据我所知,当它全部连接在一行中时,将(x = false)
被忽略,它只是打印x
.
#include "stdafx.h"
#include <iostream>
int main()
{
bool x;
std::cout << (x = true) << std::endl;
std::cout << (x = false) << std::endl;
std::cout << (x = true) << std::endl
<< (x = false) << std::endl;
std::cout << x << std::endl;
return 0;
}
解决方案
从 C++17 开始,代码的正确输出1 0 1 0 0
与您预期的一样。
在 C++17 之前,行为是未定义的。C++17 标准为<<
.
如果编译器在 C++17 模式 ( ) 中没有给出预期的输出,-std=c++17
那么这是一个编译器错误。 之前在类似问题上已经注意到,最新版本的 g++ 和 clang++ 会给出虚假警告,甚至在某些情况下在这方面有不正确的行为。
推荐阅读
- list - Prolog check if first element in lists are not equal and second item in list is equal
- reactjs - typescript that said has no exported member MyModule
- python - Using list comprehensions, transform all vowels within a string to upper case?
- r - 来自日期数据框的每月时间趋势
- c++ - Recursive Compound structure
- php - Laravel 显示带有子类别的产品
- reactjs - 如何连接两个变量的代码
- f# - 寓言 - 无法获取泛型参数的类型信息,请内联或注入类型解析器
- angular - Angular:无法绑定到“ngModel”,因为它不是“输入”的已知属性(不是重复)
- javascript - 计算元素在数组中出现的次数