template <typename T>
class Foo {
public:
T val;
Foo(T p_val) : val(p_val) {}
T sum(Foo<T> other) { return val + other.val; }
};
int main() {
Foo<int> f1(3);
Foo<int> f2(5);
std::cout << f1.sum(f2) << std::endl;
}
按预期打印8
。
如果我将成员函数签名更改为T sum(Foo other)
(删除<T>
),它仍会打印8
。一般来说,我是否包括<T>
是否重要?我使用的是Visual C ++ 2015。
答案 0 :(得分:2)
在template<...> class X
中,名称X
作为非模板引用X<...>
。
因此<T>
是多余的。这是合法的,但是多余的。