如果我有课
class A {
template<class T>
void foo(T t);
};
本书调用foo
的方式有什么区别/方式?
a.foo(t)
或
a.foo<X>(t)
答案 0 :(得分:3)
a.foo(t)
基本上会将T
推断为t
的类型。如果这对您没问题,请使用此功能。
a.foo<X>
会强制T
为X
,表达式的正确性现在取决于t
是否可转换为X
。如果您希望将t
转换为X
,有时您希望如此,但您可以将其写为a.foo(X{t})
。第二种形式并不完全等同,因为它也允许显式转换。
答案 1 :(得分:2)
在第二个版本中,X
可能不是t
的类型。例如,如果t
是float
,但您说a.foo<int>(t)
,则不会推导出浮动变体,而是整数变量(如果尚未存在),并且{{1转换将发生转换为float
。
如果类型相同,则没有区别。但是,人们永远不知道代码的整个生命周期是否类型永远不会改变。