逗号运算符如何与 C++ 中的 cout 一起使用?

Posted

技术标签:

【中文标题】逗号运算符如何与 C++ 中的 cout 一起使用?【英文标题】:How does the comma operator work with cout in C++? 【发布时间】:2018-10-06 04:28:29 【问题描述】:

什么是返回值(未打印)

cout << 1, 2, 3, 4, 5;

如何调试这段代码?

我还需要解释一下 ostream 和 cout 是如何工作的。

【问题讨论】:

为什么您希望逗号运算符与std::cout 的工作方式与正常情况不同?你试过做什么? 当你尝试运行它时发生了什么?你期待什么?为什么期待它? 查看en.cppreference.com/w/cpp/language/operator_precedence,然后添加括号。 How does the Comma Operator work的可能重复 【参考方案1】:

返回值为int,其值为5。作为副作用,1 将被打印出来。

#include <iostream>

using namespace std;

int main(void)

    auto rv = (cout << 1, 2, 3, 4, 5);

    std::cout << rv;

    return 0;

【讨论】:

(cout &lt;&lt; 1), 2, 3, 4, 5 视情况而定。如果你用括号括起来(cout &lt;&lt; 1, 2, 3, 4, 5),你会得到5。如果您不添加括号,而是分配给像auto r = cout &lt;&lt; 1, 2, 3, 4, 5 这样的变量,则= 运算符的绑定比, 更强,并且您将std::ostream&amp; 作为r 的类型。 @NiklasR 我首先尝试过,但它实际上无法为我编译,std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt;::operator =(const std::basic_ostream&lt;char,std::char_traits&lt;char&gt;&gt; &amp;)': attempting to reference a deleted function @nvoigt 这是因为将变量声明为auto 不会推断出引用,因此r 的类型实际上将是std::ostream,即使分配的值是@987654337 @。 std::ostream 无法复制,因此出现“已删除函数”错误。将 r 声明为 auto&amp; 将使其成为 std::ostream&amp; 引用。 @RemyLebeau 你试过了吗?因为我将它明确设置为ostream&amp; 时遇到相同的错误,即使我拆分声明和分配时我仍然会得到它。

以上是关于逗号运算符如何与 C++ 中的 cout 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

c ++中的逗号运算符不计算第二个表达式

cin与cout详解

C++中关于string类型究竟能不能用cout输出的问题

为啥 return 0 或 break 不能与逗号运算符一起使用?

与 ? 一起使用时的逗号运算符优先级: 运算符 [重复]

如何在 C++ 中的字符串之间使用 cin?