如果(!(是>> s))是什么意思?

时间:2017-11-18 13:00:06

标签: c++ operator-overloading iostream

这是一个重载的$ = jQuery; var currentID = null; var chatTimer = null; var oldhtml = ""; function fetch_data() { $.ajax({ url: "select.php", method: "POST", success: function(data) { $('#live_data').html(data); } }); } function fetch_chat() { $.ajax({ url: "fetch_chat.php", method: "POST", data: { id: currentID }, dataType: "text", success: function(data) { $("#chatbox").show(); $('#messages').html(data); $("div.area").show(); if (oldhtml !== data) { $('#messages').scrollTop($('#messages')[0].scrollHeight); } oldhtml = data; } }); } $(document).ready(function() { fetch_data(); setInterval(function() { fetch_chat(); }, 500); $(document).on('click', '.first_name', function() { currentID = $(this).data("id1"); fetch_chat(); }); $("#sub").click(function() { var text = $("#text").val(); $.post('insert_chat.php', { id: currentID, msg: text }, function(data) { $("#messages").append(data); $("#text").val(''); }); }); }); 运算符函数:

>>

据我了解,std::istream& operator>>(std::istream& is, std::vector<int>& v){ string s; if (! (is >> s) ) return is; ... return is; } 毫无意义,因为终端或控制台会等到键盘或其他来源的输入进入if(! (is >> s))。因此,s中的条件值最终将为if()。谁可以帮忙?

4 个答案:

答案 0 :(得分:3)

is >> s尝试从流s读取字符串is

istream s operator>>()会返回对is的引用。

istream s operator!()测试流是否处于无效状态。具体来说,如果已设置流的badbit或failbit,则返回true

所以,

 if (! (is >> s) )
     return is;

在功能上等同于

 is >> s;
 if (is.fail()) return is;    // is.fail() returns true if failbit or badbit are set

这意味着如果从流中读取字符串失败,函数会立即返回。请注意,这与到达流的末尾不同。

答案 1 :(得分:2)

istream不一定是控制台。它可以是一个字符串流。此外,应用程序代码不会看到“等待用户输入”。输入流被填充时(由操作系统,底层库,...)

,它处于睡眠状态

无论如何:如果输入流根本不包含任何数据,则该条件为真。

std::string s; // empty!
std::stringstream ss(s);

std::vector<std::string> strings;
ss >> strings; // should be empty!

答案 2 :(得分:1)

了解if (!(is >> s))意味着您需要了解if (is >> s)的含义。

由于isstd::istream,因此运营商>>会返回std::istream。因此,is >> sstd::istreamif内必须生成逻辑值truefalseThis Q&A解释了如何在不同版本的C ++中完成它。本质上,std::istream在操作成功时评估为真实条件。

既然您已了解is >> s的含义,那么您可以发现添加否定会翻转其含义:!(is >> s)只有在从{{1}读取s时才会成立}不成功。对于字符串,不成功的读取意味着流处于无效状态,例如,因为已到达流的末尾。

答案 3 :(得分:-1)

你在一行中做了很多事情

! (is >> s)

你接受输入流并使用它来分配对象s,在if条件下评估s的结果