尝试重载 << 运算符时出错
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)
请勿重复。
我在尝试重载 << 运算符时无法编译以下代码。谁能指出哪里出了问题?
#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)
请勿重复。