c++ - std 命名空间中的 operator<< 有什么作用?

标签 c++

以下代码当然可以工作(它调用 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

前两个有效,因为它们调用带有两个参数的非成员函数。以charchar const* 作为参数的函数被定义为非成员(自由)函数。

但是,以int为参数的函数被定义为member函数,也就是说第三个函数需要调用一个成员函数。如果您将其作为 non-member 函数调用,则必须将 int 转换为存在非成员函数的 some type .因此,当考虑这种转换时,它会产生歧义,因为有许多可能的转换同样好。

如前所述,这应该可行:

cout.operator<<(1); //should work

至于为什么有些函数被定义为成员而另一些函数被定义为非成员,我不知道答案。这需要对导致图书馆设计的提案和决策进行大量研究。

关于c++ - std 命名空间中的 operator<< 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19462152/

相关文章:

android - 如何保持发布版本的断言活跃

c++ - 防止将临时对象作为参数传递给函数

c++ - Qt: "No such signal"错误

c++ - 需要额外模板参数的类型的函数的部分模板特化

c++ - 从 STM32CubeIDE 启动 QEMU 模拟器时出现问题

C++ 包括 - 交叉引用文件

c++ - Gtkmm3 : wait for css transition to finish

c++ - 指向(定义了指针数组)字符串的指针数组 : Are the strings stored sequential in memory?

c++ - 使用 Boost Polygon 的减法结果不正确

c++ - 如何在没有 lib 文件的情况下将 dll 引用到 Visual Studio