gpt4 book ai didi

c++ - 如何比较两个 std::istream 引用?

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:48 26 4
gpt4 key购买 nike

我将编译器从 GCC 切换到 Clang/LLVM,遇到了以前从未遇到过的编译错误。

我有一个看起来像这样的类:

#include <iostream>

class foo {
public:
bar(std::istream& is) : _fp(is), _sCheck(is != std::cin) { /* ... */ }
private:
std::istream& _fp;
bool _sCheck;
}

当我编译此文件时,clang++ 出现以下错误,其中私有(private)变量 _sCheck 的初始化失败:

error: invalid operands to binary expression ('std::istream' (aka 
'basic_istream<char>') and 'istream' (aka 'basic_istream<char>'))

(is != std::cin)
~~ ^ ~~~~~~~~

如果这个地址比较中的两个对象都是同一类型,为什么clang++返回错误,而g++却没有?

我尝试了一个 dynamic_cast 来使它们都成为 std::istream&,但这也返回了一个错误:

error: invalid operands to binary expression ('std::istream' (aka 
'basic_istream<char>') and 'std::istream')

(is != dynamic_cast<std::istream&>(std::cin))
~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果这是一个愚蠢的问题,我提前道歉;我很感激任何指点。

最佳答案

您使用的是引用,因此您比较的是对象,而不是您可能打算比较的指针。似乎 GCC 有一个扩展允许你比较 std::istream 对象,但这不是 std::basic_istream 的标准化接口(interface)的一部分| .尝试:

_sCheck(&is != &std::cin)

关于c++ - 如何比较两个 std::istream 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18868060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com