逗号运算符如何与 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 << 1), 2, 3, 4, 5
视情况而定。如果你用括号括起来(cout << 1, 2, 3, 4, 5)
,你会得到5
。如果您不添加括号,而是分配给像auto r = cout << 1, 2, 3, 4, 5
这样的变量,则=
运算符的绑定比,
更强,并且您将std::ostream&
作为r
的类型。
@NiklasR 我首先尝试过,但它实际上无法为我编译,std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::operator =(const std::basic_ostream<char,std::char_traits<char>> &)': attempting to reference a deleted function
@nvoigt 这是因为将变量声明为auto
不会推断出引用,因此r
的类型实际上将是std::ostream
,即使分配的值是@987654337 @。 std::ostream
无法复制,因此出现“已删除函数”错误。将 r
声明为 auto&
将使其成为 std::ostream&
引用。
@RemyLebeau 你试过了吗?因为我将它明确设置为ostream&
时遇到相同的错误,即使我拆分声明和分配时我仍然会得到它。以上是关于逗号运算符如何与 C++ 中的 cout 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章