在这个 Stack Overflow回答 中提到,
但是,当我编译上面的代码时,它无法编译!然后尝试了其他一些方法后,我发现它无法编译的原因是因为
或者更简单地说,
编辑
使用
std::cout << "Hello World!" << std::endl;
和以下代码等价:std::operator<<(std::operator<<(std::cout, "Hello World!"), std::endl);
但是,当我编译上面的代码时,它无法编译!然后尝试了其他一些方法后,我发现它无法编译的原因是因为
std::endl
,如果我用"\n"
替换 std::endl
,那么它就可以工作了。但为什么不能将 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);
,但无法编译通过。 - Allanqunzistd::cout.operator<<(std::endl)
。 - David Gprint(x, "hi")
和x.print("hi")
。虽然运算符函数的查找方式与其他名称不同。 - David G