以下代码当然可以工作(它调用 std::cout::operator<<):
cout << 1 << '1' << "1" << endl;
偶然发现还有std::operator<<,而且似乎只对char或char*参数有效:
operator<<(cout, '1'); // ok
operator<<(cout, "1"); // ok
operator<<(cout, 1); // error
那么为什么我们需要这个操作符以及如何使用它呢?
谢谢。
最佳答案
operator<<(cout, '1'); // ok
operator<<(cout, "1"); // ok
operator<<(cout, 1); // error
前两个有效,因为它们调用带有两个参数的非成员函数。以char
和char const*
作为参数的函数被定义为非成员(自由)函数。
但是,以int
为参数的函数被定义为member函数,也就是说第三个函数需要调用一个成员函数。如果您将其作为 non-member 函数调用,则必须将 int
转换为存在非成员函数的 some type .因此,当考虑这种转换时,它会产生歧义,因为有许多可能的转换同样好。
如前所述,这应该可行:
cout.operator<<(1); //should work
至于为什么有些函数被定义为成员而另一些函数被定义为非成员,我不知道答案。这需要对导致图书馆设计的提案和决策进行大量研究。
关于c++ - std 命名空间中的 operator<< 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19462152/