重载和模板组合
Overloading and Template Combined
下面的代码让我很困惑:
-
我期望
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
我认为这个问题的答案是相对简单的:这是一个编译器错误!相关报价结束了。第6段开头,第一句(c++ 2011):
操作符函数要么是非静态成员函数,要么是非成员函数,并且至少有一个形参的类型是类、类的引用、枚举或枚举的引用。
我用当前版本的EDG前端、g++和clang++测试了你的代码,它们都正确地拒绝了代码。
相关文章:
- 继承函数的重载解析
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在 std::visit 中跳过变体类型的一些重载组合的方法是什么?
- 重载运算符 "=" 和 "+" 组合在 C++ 中不起作用
- c++ 在对象组合上使用重载构造函数
- 在重载函数的函数参数中使用右值引用会创建太多组合
- C std::lower_bound,使用重载运算符作为二进制谓词组合
- 哪种重载组合性能最高
- 重载用于组合使用向量的两个字典的+运算符
- 重载和模板组合
- c++中的组合操作符重载
- 这是用组合向量类重载[]的正确方法吗?
- 组合或替换多个相似的重载
- 算术和赋值操作符重载-返回值,范围,组合表达式
- 通过组合实现函子重载
- 重载运算符和继承与模板(强大的组合)
- 在组合模板和类函数重载时遇到麻烦