尝试重载 << 运算符时出错

在尝试重载 << 运算符时,我无法编译以下代码。任何人都可以指出出了什么问题吗?

#include <iostream>

std::ostream& operator<<(std::ostream& i, int n)
{
    return i;
}

int main()
{
    std::cout << 5 << std::endl;
    std::cin.get();
    return 0;
}

回答

C++ 标准库中已经为 int 类型的对象定义了运算符 <<

basic_ostream<charT, traits>& operator<<(int n);

所以这个语句中操作符的调用

std::cout << 5 << std::endl;

是模棱两可的,因为标准运算符是由于依赖于参数的查找而找到的。

要停用 ADL,您可以编写以下内容,例如使用两个参数显式调用运算符

#include <iostream>
std::ostream& operator<<(std::ostream& i, int n)
{
return i.operator <<( n );
}
int main()
{
operator <<( std::cout, 5 ) << std::endl;
std::cin.get();
return 0;
}

程序输出是

5

虽然它没有多大意义。:)


以上是尝试重载 &lt;&lt; 运算符时出错的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>