for循环中没有检查条件,但循环仍然终止C++; < >我有C++中的一个程序,它有一个简单的for循环,for循环没有检查条件: for (std::string a_word; std::cin >> a_word;) { // code goes here } // Code after the loop

for循环中没有检查条件,但循环仍然终止C++; < >我有C++中的一个程序,它有一个简单的for循环,for循环没有检查条件: for (std::string a_word; std::cin >> a_word;) { // code goes here } // Code after the loop,c++,for-loop,operator-overloading,C++,For Loop,Operator Overloading,我编译了它们并在终端上运行,当我点击Ctrl+D(EOF)时,for循环停止并在循环后运行代码,虽然没有检查条件,但有人能解释引擎盖下发生了什么吗?但循环中确实有条件。任何流,输入操作符>返回流。您错了。循环中存在一个条件 for (std::string a_word; std::cin >> a_word;) { ^^^^^^^^^^^^^^^^^^ // code goes here } 是的 std::cin >&

我编译了它们并在终端上运行,当我点击Ctrl+D(EOF)时,for循环停止并在循环后运行代码,虽然没有检查条件,但有人能解释引擎盖下发生了什么吗?

但循环中确实有条件。任何流,输入操作符
>
返回流。

您错了。循环中存在一个条件

for (std::string a_word; std::cin >> a_word;) {
                         ^^^^^^^^^^^^^^^^^^
  // code goes here
}
是的

std::cin >> a_word;
for语句这一部分中的任何表达式(或声明)都会在上下文中转换为类型
bool

<> >从C++标准(6.4选择语句)

  • …作为表达式的条件的值是表达式的值,上下文转换为bool,用于其他语句 比开关

    >在C++ StRATDR< /P>中定义了流的显式运算符

    explicit operator bool() const;
    
    返回
    !fail()

    表达式
    std::cin>>一个单词
    返回对
    std::cin
    的引用,并应用上面显示的转换运算符


    因此,当您按下
    Ctrl+D
    时,
    fail()
    返回
    true
    ,循环的条件(
    !fail()
    )等于
    false

    istream&istream::operator>(T&)
    返回一个istream对象,该对象可转换为bool(
    运算符bool()常量
    )当出现错误条件(EOS或Ctrl+D符合错误条件)时,将转换为false。

    回答非常好。删除我的。:)我很傻,检查条件在第二部分,在第一个分号之后,我偏执地认为它在第二个分号之后