【发布时间】:2015-09-17 22:58:54
【问题描述】:
在这个Stack Overflow answer
它说std::cout << "Hello World!" << std::endl; 与
std::operator<<(std::operator<<(std::cout, "Hello World!"), std::endl);
但是当我编译上面的行代码时,它没有编译!然后在尝试了其他方法后,我发现它无法编译的原因是因为std::endl,如果我将std::endl 替换为"\n",那么它就可以工作。但是为什么不能将std::endl 传递给std::operator<<?
或者更简单地说,std::cout<<std::endl; 和 std::operator<<(std::cout, std::endl); 不一样吗?
编辑
使用icpc test.cpp编译时,报错信息为
error: no instance of overloaded function "std::operator<<" matches the argument list argument types are: (std::ostream, <unknown-type>) std::operator<<(std::cout, std::endl);
而g++ test.cpp 给出的错误信息要长得多。
【问题讨论】:
-
后一个问题可以通过尝试那行代码来回答。和“......它不编译!”意义不大,除非您还包含 错误消息,当它编译失败时在您的问题中。
-
我试过了,
std::operator<<(std::cout, std::endl);无法编译。 -
操纵器的重载是成员函数,所以
std::cout.operator<<(std::endl) -
std::operator <<和std::cout.operator <<有什么区别?您认为我在哪里可以找到对std::operator <<的引用? -
@Allanqunzi 是成员函数调用 vs 非成员函数调用。类似于
print(x, "hi")与x.print("hi")。 Though operator functions are found differently 比其他名字。