【发布时间】:2018-10-06 04:28:29
【问题描述】:
什么是返回值(未打印)
cout << 1, 2, 3, 4, 5;
如何调试这段代码?
我还需要解释一下 ostream 和 cout 是如何工作的。
【问题讨论】:
-
为什么您希望逗号运算符与
std::cout的工作方式与正常情况不同?你试过做什么? -
当你尝试运行它时发生了什么?你期待什么?为什么期待它?
什么是返回值(未打印)
cout << 1, 2, 3, 4, 5;
如何调试这段代码?
我还需要解释一下 ostream 和 cout 是如何工作的。
【问题讨论】:
std::cout 的工作方式与正常情况不同?你试过做什么?
返回值为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 的类型。
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
auto 不会推断出引用,因此r 的类型实际上将是std::ostream,即使分配的值是@987654337 @。 std::ostream 无法复制,因此出现“已删除函数”错误。将 r 声明为 auto& 将使其成为 std::ostream& 引用。
ostream& 时遇到相同的错误,即使我拆分声明和分配时我仍然会得到它。