下面的代码使我感到困惑:
我期待operator+<int>
给出编译时错误,因为运算符重载要求至少一个非内在类型。如果我尝试int operator+(int i, int j)
则失败。但它没有造成任何问题,为什么?
如果我致电2+3
并且没有致电operator+
,我必须明确operator+<int>
吗?
是否有更好的方式,然后写operator+<int>
来调用operator+
的定义?
是否有可以参考的地方,哪个更好地解释了?
注意:我使用了“Sun C ++ 5.10”
#include <iostream>
using namespace std;
template <typename T>
T operator+(T i, T j)
{
return i+j;
}
int main()
{
cout<<2+3;
cout<<operator+<int>(2,3);
cout<<endl;
}
输出如下,
bash-2.03$ ./a.out
55
答案 0 :(得分:1)
我认为这个问题的答案相对简单:这是编译错误!相关引用已超过第6段,第一句(C ++ 2011):
运算符函数应该是非静态成员函数或者是非成员函数,并且至少有一个参数,其类型是类,对类的引用,枚举或对枚举的引用。
我使用当前版本的EDG的前端,g ++和clang ++测试了你的代码,他们都正确地拒绝了代码。