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

Error while trying to overload << operator

我在尝试重载 << 运算符时无法编译以下代码。谁能指出哪里出了问题?

#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

虽然意义不大。:)

因为不止一个运算符“<<”匹配这些操作数。

std::ostream& operator<<(std::ostream& i, int n)已定义。

运算符可以重载,不能覆盖。

运算符 是这样工作的:
TypeA a = (TypeB)operand1 operator (TypeC)operand2

将运算符视为一个函数,它转换为这个函数:
TypeA operator(TypeB operand1, TypeC operand2)

两次定义函数会导致编译错误。

要重载 <<,尝试:
std::ostream& operator<<(std::ostream& i, OtherType n)

AnyType operator<<(AnyType i, AnyType n)

请勿重复。