未找到“==”运算符

'==' operator not found

很明显这个程序不起作用。软件告诉我缺少“==”运算符。有人能告诉我该怎么做并解释为什么 his/her 解决方案有效吗?

#include <iostream>
using namespace std;

int main() {

    int var{ 0 };

    cout << "Bitte eine Ganzzahl eingeben: ";
    if ((cin >> var) == false) {
        cerr << "Falsche Eingabe - Keine Zahl\n";
        exit(1);
    }


    system("pause");
    //return 0;
}

当我们在做的时候。为什么可以在 if 语句中执行 'cin'?我会在 if 语句之前使用 'cin'。

在现代 C++ 中,可以使用 explicit operator bool 测试流的状态。这意味着它可以直接用作 if 语句中的条件,但不能隐式转换为 bool 以与 false 进行比较。所以你需要更惯用的

if (cin >> var)

测试状态。

Why is it possible to execute 'cin' in the if statemant?

因为条件可以是任何表达式,只要有可以转换为bool的结果即可。 >> 运算符 returns 对流的引用,可以通过我上面描述的运算符进行转换。

std::istream 具有到 bool 的转换运算符,但它必须是显式的 (http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool):

explicit operator bool() const;

您可以使用显式转换运算符:

if ( (bool)(cin >> var) == false) {
    cerr << "Falsche Eingabe - Keine Zahl\n";
}

或简单地使用:

if ( !(cin >> var) ) {
    cerr << "Falsche Eingabe - Keine Zahl\n";
}

首先cin不是你执行的东西,像一些其他语言的print命令。它是 class istream 的一个对象,表示字符的标准输入流。

运算符>> 从此类流中提取格式化输入。它的原型是这样的

istream& operator>> (int& val);

意思是 returns 对 istream 本身的引用,因此您可以像

这样的链式操作
cin >> foo >> bar;

所以你不能比较 cin >> foo 的结果,它是一个引用,与常量 false.

另一方面,运算符“!”已重载,与 fail 含义相同,因此您可以像这样检查操作是否成功

if ( ! (cin >> var) ) {
   cerr << "something is going wrong" << endl;
}