将 (cin >> someVar) 的 return 分配给 C++ 中的 istream 变量时出错

Error when assigning the return of (cin >> someVar) to an istream variable in C++

我刚开始学习 C++ 作为一门附加语言,遇到了标题中提到的问题。这是我开始时使用的代码:

#include "HelloWorldWriter.h"
#include <iostream>

using namespace std;

int HelloWorldWriter::getNumberOfRepetitions() {
    cout << "Enter number of Hello Worlds: ";
    int repetitions = 0;
    if(cin >> repetitions){
        if(repetitions > 0){
            return repetitions;
        }
    } else{
        return 0;
    }
}

...

我假设 cin >> repetitions 会将用户输入的值存储到 repetitions 和 return true 中,如果用户输入的内容可以解析为整数,否则为假。然后我尝试将 cin >> repetitions 的结果分配给一个布尔值,但它产生了一个错误,显示 "Types bool and istream are not compatible"。然后我尝试了以下作业:

istream inputSuccessful = cin >> repetitions;

然而这产生了一个错误,说 "basic_istream::basic_istream(const basic_istream &) is deleted"。

我现在有以下问题:

1)当使用cin >> someInt(整数someInt作为target/argument)时,什么行为(目标变量中的值,return值,下一个期间的行为调用那个运算符,...) 如果用户输入一个没有前导数字的单词(即不能解析为整数),你应该期待吗?

2) 如何将 cin >> someInt 的结果保存在变量中?它必须是什么类型?该值与布尔表达式有何关系?

这个声明

istream inputSuccessful = cin >> repetitions;

要求将 cin 复制到 inputSuccessful。流的复制构造函数被删除,因此会出现错误。然而,复制或引用 cin 是没有意义的,因为无论你可以用引用做什么,你也可以直接用 cin 做。

您应该将变量设为 bool

bool inputSuccessful(cin >> repetitions);

现在 inputSuccessful 将包含 true 如果读取 repetitions 成功,否则 falsethis Q&A.

中描述了其工作方式