未找到'=='运算符

'==' operator not found

本文关键字:运算符      更新时间:2023-10-16

显然这个prgoram不起作用。软件告诉我" =="操作员缺少。有人能告诉我该怎么办,并解释他/她的解决方案为什么有效?

#include <iostream>
using namespace std;
int main() {
    int var{ 0 };
    cout << "Bitte eine Ganzzahl eingeben: ";
    if ((cin >> var) == false) {
        cerr << "Falsche Eingabe - Keine Zahln";
        exit(1);
    }

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

当我们在此时。为什么可以在if stapemant中执行" CIN"?我会在if stapemant之前使用" cin"。

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

if (cin >> var)

测试状态。

为什么可以在if stapemant中执行" CIN"?

因为条件可以是任何表达式,只要它具有可以转换为bool的结果即可。>>操作员返回对流的引用,可以通过我上面描述的操作员转换。

第一个cin不是您执行的内容,例如其他某些语言的print命令。它是代表chars标准输入流的类 istream 的对象。

操作员>>从此类流中提取格式化的输入。它的原型像

istream& operator>> (int& val);

这意味着它返回对iStream本身的引用,因此您可以链接操作,例如

cin >> foo >> bar;

因此,您无法将cin >> foo的结果(是参考)与常数false进行比较。

另一方面,操作员"!"被超载,与fail相同,因此您可以检查操作是否成功

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

std::istream具有转换操作符为 bool,但必须明确(http://en.cppreference.com/w/cpp/io/basic_ios/basic_ios/operator_bool):

explicit operator bool() const;

您可以使用显式转换操作员:

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

或简单地使用:

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