`cout<< x`和`cout.operator<<(x)`?

时间:2011-01-21 19:43:38

标签: c++

我一直在尝试使用for_each将字符串向量打印到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打印字符串向量):似乎最好将std::copystd::ostream_iterator一起使用,如下所示:How do I use for_each to output to cout?

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:13)

std::cout << message;等同于operator << (std::cout, message)而不是你所写的内容。

operator <<已被定义为自由函数,而不是成员函数

std::ostream& operator<<(std::ostream& out, const std::string& s) { ... }