gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:01:43 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com