C++ 如果(!(is>;>;s))是什么意思?
这是一个重载的C++ 如果(!(is>;>;s))是什么意思?,c++,operator-overloading,iostream,C++,Operator Overloading,Iostream,这是一个重载的>运算符函数: std::istream& operator>>(std::istream& is, std::vector<int>& v){ string s; if (! (is >> s) ) return is; ... return is; } std::istream&operator>>(std::istream&is,std::vector&v){ 字符串s; 如果(!(is>
>
运算符函数:
std::istream& operator>>(std::istream& is, std::vector<int>& v){
string s;
if (! (is >> s) )
return is;
...
return is;
}
std::istream&operator>>(std::istream&is,std::vector&v){
字符串s;
如果(!(is>>s))
回报是;
...
回报是;
}
据我所知,
如果(!(is>>s))
没有意义,因为终端或控制台将等待来自键盘或其他来源的输入进入s
。所以,if()
中的条件值最终将是false
。谁能帮忙?istream不一定是控制台。它可以是一条细流。此外,应用程序代码看不到“等待用户输入”。它在输入流被填充时处于休眠状态(由操作系统、底层库等填充)
无论如何:如果输入流根本不包含任何数据,则此条件为真
std::string s; // empty!
std::stringstream ss(s);
std::vector<std::string> strings;
ss >> strings; // should be empty!
std::string s;//空的!
标准::stringstream ss(s);
std::向量字符串;
ss>>字符串;//应该是空的!
您在一行中做了很多事情
! (is >> s)
您获取inputstream并使用它来分配对象s,在if条件下对s的结果进行求值以了解
if(!(is>>s))
意味着您需要了解if(is>>s)
意味着什么
由于is
是std::istream
,因此操作员>
返回std::istream
。因此,is>>s
是一个std::istream
,它在if
中必须产生一个逻辑值true
或false
。解释它是如何在C++的不同版本中完成的。本质上,当操作成功时,std::istream
计算结果为真实条件
既然您知道了
is>>s
的含义,那么您就可以明白添加否定会颠覆这一含义:!(is>>s)
只有在从is
读取s
失败时才会为真。对于字符串,读取不成功意味着流处于无效状态,例如,因为已到达流的结尾。该is>>s
尝试从流is
读取字符串s
istream
soperator>>()
返回对is
的引用
istream
s操作员!()
测试流是否处于无效状态。具体来说,如果流的badbit或failbit已设置,则返回true
所以
在功能上等同于
is >> s;
if (is.fail()) return is; // is.fail() returns true if failbit or badbit are set
这意味着,如果从流中读取字符串失败,函数将立即返回。请注意,这与到达流的末尾不同。必须将其读取为“if
is
无法读取字符串”。该代码太密集。它应该由两部分组成:is>>s;如果(!is).
。我觉得这篇文章很详尽,但其他文章也给我提供了信息,谢谢!)
is >> s;
if (is.fail()) return is; // is.fail() returns true if failbit or badbit are set