首页 > 解决方案 > 在流中多次设置值

问题描述

是否可以在单个流中多次设置一个值,例如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++

解决方案


从 C++17 开始,代码的正确输出1 0 1 0 0与您预期的一样。

在 C++17 之前,行为是未定义的。C++17 标准为<<.

如果编译器在 C++17 模式 ( ) 中没有给出预期的输出,-std=c++17那么这是一个编译器错误。 之前在类似问题上已经注意到,最新版本的 g++ 和 clang++ 会给出虚假警告,甚至在某些情况下在这方面有不正确的行为。


推荐阅读