c++ - `cout << x` 和 `cout.operator <<(x)` 之间的区别?

标签 c++

我一直在尝试使用 for_each 将字符串 vector 打印到 cout。但是,在制定语句时,我发现未定义 std::ostream::operator<<(const std::string &); 导致编译器错误。下面的代码说明了这个问题:

#include <iostream>
#include <string>


int main()
{
    std::string message = "Hello World!\n";

    // This works
    std::cout << message;

    // Compiler error
    std::cout.operator <<(message);
}

我认为这两个语句应该与编译器相同。显然他们不是。那么有什么区别呢?

已解决

正如 Tomalak 和 Prasoon 所说,我需要调用这个函数:

std::ostream& operator<<(std::ostream&, const std::string&);

因此以下示例将起作用:

#include <iostream>
#include <string>


int main()
{
    std::string message = "Hello World!\n";
    operator<<(std::cout, message);
}

关于我最初的目标(使用 for_each 打印字符串 vector ):似乎最好使用 std::copystd::ostream_iterator 作为此处说明:How do I use for_each to output to cout?

最佳答案

您正在寻找 std::ostream& 运算符<<(std::ostream&, const std::string&);。这是一个免费的功能。

关于c++ - `cout << x` 和 `cout.operator <<(x)` 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4763067/

相关文章:

c++ - malloc如何分配小于4KB的内存?

c++ - 多组删除最后一个元素

c++ - 使用连接的套接字终止 QWebSocketServer

c++ - 如何重置我的DirectX 9设备?

c++ - 修复第三方代码 : "error: ‘enable_if’ in namespace ‘std’ does not name a template type"

c++ - 使用 '\0'作为比较操作数

c++ - 动态数组的实现是否在开始时保留空间,以备不时之需?

c++ - C++:模式:根据命令行参数,哪种模式适合特定代码执行

c++ - xutility 文件?

c++ - 这是 Visual C++ 2010 中的错误,还是我遗漏了什么?