尝试重载 << 运算符时出错
在尝试重载 << 运算符时,我无法编译以下代码。任何人都可以指出出了什么问题吗?
#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
虽然它没有多大意义。:)