仅使用标准类型参数实例化具有模板化类类型的变量时,语法如下所示:
template<typename Arg = int>
class Templ;
Templ<>& myTempl;
省略空的参数列表
<>
应该会产生编译错误,因为需要模板参数列表。但是显然(至少在VS2013下),以下声明不需要模板参数列表:
template<typename Arg> //" = int" left out
class Templ{
Templ& myTempl; //no <> here
};
但是为什么这样做呢?根据IntelliSense的说法,编译器选择了正确的类型(
Templ<int>
),因此它可以按预期运行,但是成员声明是否仍需要一个空的参数列表?编辑:不,它不能按预期工作。我没有足够彻底地检查它。将鼠标悬停在
Templ<short>::myTempl
行上时,IntelliSense会显示其类型为short
。 最佳答案
类名被注入(inject)到类作用域中
9个类(class)[class]
以及类似的类模板
14.6.1本地声明的名称[temp.local]
这样您就可以在意思Templ
的情况下使用Templ<Arg>
。