如果(!(是>>秒))意味 着?
what does if(! (is >> s)) mean?
这是一个重载的>>
运算符函数:
std::istream& operator>>(std::istream& is, std::vector<int>& v){
string s;
if (! (is >> s) )
return is;
...
return is;
}
据我了解,if(! (is >> s))
没有意义,因为终端或控制台将等到来自键盘或其他来源的输入进入s
。因此,if()
的条件价值最终将false
。谁能帮忙?
is >> s
尝试从流is
读取字符串s
。
istream
operator>>()
返回对 is
的引用。
istream
operator!()
测试流是否处于无效状态。 具体来说,如果设置了流的坏位或故障位,它会返回true
。
所以
if (! (is >> s) )
return is;
在功能上等效于
is >> s;
if (is.fail()) return is; // is.fail() returns true if failbit or badbit are set
这意味着如果从流中读取字符串失败,该函数会立即返回。 请注意,这与到达流的末尾不同。
istream
不必是控制台。 它可以是字符串流。 此外,应用程序代码看不到"等待用户输入"。 它在输入流被填充时处于睡眠状态(由操作系统、底层库等(
无论如何:如果输入流根本不包含任何数据,则此条件将为真。
std::string s; // empty!
std::stringstream ss(s);
std::vector<std::string> strings;
ss >> strings; // should be empty!
要理解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)
您获取输入流并使用它来分配对象 S,即在 if 条件中评估 S 的结果
相关文章:
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- C 字符串比较“祝您好运”&gt;“再见”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- C 操作员&gt;&gt;与突变器过载
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 是否需要使用 - &gt;运算符在C 中调用成员函数时
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- 如果(!(是>>秒))意味 着?
- 错误c++visual studio c2227左侧'->;Init';必须指向类/结构/联合/泛型类型
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- ``这个''不能用this-&gt;指针变量
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 使用shared_ptr<字符串>转换为一个无序集合<字符串>