似乎多余地使用 cin 作为 if 的条件,while
Seems redundant use of cin as a condition with if, while
我得到了一个对我来说似乎多余的代码:
char c;
cin>>c;
if(cin&&c=='n')
//do something
我不明白在if中引入cin的价值,是不是总要有TRUE值,因为我我从来没有遇到过(以我有限的经验)没有构造这个 istream 对象的情况。
同样我也看到了这个:
if(cin)
请指正我哪里错了。现在人们不会 post 我已经知道的流中错误部分,主要部分是除了失败之外流何时失败
ios_base::初始化
std::cin
is an instance of std::basic_istream<char>
. Since it's being used in the context of a condition, we are interested it's bool
conversion operator. From http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool :
std::basic_ios::operator bool
Returns true if the stream has no errors and is ready for I/O operations. Specifically, returns !fail()
从文档中可以清楚地看出,if(cin)
是为了检查 cin
是否有任何错误。更准确地说,它是说 "如果 cin
在上次操作期间没有遇到错误"。
if(cin&&c=='n')
中的条件遵循相同的原则,但也会检查提供的输入流 n
。也就是说,"if cin
没有遇到错误,返回字符n
".
我得到了一个对我来说似乎多余的代码:
char c;
cin>>c;
if(cin&&c=='n')
//do something
我不明白在if中引入cin的价值,是不是总要有TRUE值,因为我我从来没有遇到过(以我有限的经验)没有构造这个 istream 对象的情况。
同样我也看到了这个:
if(cin)
请指正我哪里错了。现在人们不会 post 我已经知道的流中错误部分,主要部分是除了失败之外流何时失败 ios_base::初始化
std::cin
is an instance of std::basic_istream<char>
. Since it's being used in the context of a condition, we are interested it's bool
conversion operator. From http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool :
std::basic_ios::operator bool
Returns true if the stream has no errors and is ready for I/O operations. Specifically, returns !fail()
从文档中可以清楚地看出,if(cin)
是为了检查 cin
是否有任何错误。更准确地说,它是说 "如果 cin
在上次操作期间没有遇到错误"。
if(cin&&c=='n')
中的条件遵循相同的原则,但也会检查提供的输入流 n
。也就是说,"if cin
没有遇到错误,返回字符n
".