Ниже код заставил меня путать:Перегрузки и Шаблон Комбинированный
Я ожидал
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
Как вы определили '2?'? – thiton
Я не уверен, в чем проблема. Вам известно, что вы не можете создать функцию 'operator + (int, int)', и вы создали функцию 'operator + (int, int)', что не то же самое ... –
operator + Код ошибки:. Поэтому я думал, что если operator + (int, int) не разрешен, то оператор + (int, int) также не должен быть разрешен. Поскольку шаблоны разрешаются во время компиляции. –
rakesh