for循环中没有检查条件,但循环仍然终止C++; < >我有C++中的一个程序,它有一个简单的for循环,for循环没有检查条件: for (std::string a_word; std::cin >> a_word;) { // code goes here } // Code after the loop
我编译了它们并在终端上运行,当我点击Ctrl+D(EOF)时,for循环停止并在循环后运行代码,虽然没有检查条件,但有人能解释引擎盖下发生了什么吗?但循环中确实有条件。任何流,输入操作符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 >&
>
返回流。您错了。循环中存在一个条件
for (std::string a_word; std::cin >> a_word;) {
^^^^^^^^^^^^^^^^^^
// code goes here
}
是的
std::cin >> a_word;
for语句这一部分中的任何表达式(或声明)都会在上下文中转换为类型bool
<> >从C++标准(6.4选择语句)
>在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。回答非常好。删除我的。:)我很傻,检查条件在第二部分,在第一个分号之后,我偏执地认为它在第二个分号之后