template<typename std::list<int>::value_type value>
int silly()
{
return value;
}
template<typename int value>
int silly2()
{
return value;
}
template<int value>
int silly3()
{
return value;
}
问题1&GT;是value_type
std::list<int>
的{{1}}吗?
问题2&GT;这三个int
函数实际上是否相同?
答案 0 :(得分:3)
首先,代码
template<typename int value>
int silly2()
{
return value;
}
不合法,因为不允许使用模板参数定义。您需要通过说template <int value>
或通过说template <typename value>
来通过类型参数对整数值进行参数化。在第一个模板中允许typename
的原因是它使用typename
的第二个含义,即接下来命名的类型。
除此之外,是的,(1)和(3)是相同的,因为C ++ ISO规范要求std::list<int>::value_type
为int
。
希望这有帮助!
答案 1 :(得分:2)
答案1:是的,container::value_type
是其所包含元素类型的typedef
答案2:您的silly2()
生成不良,因为模板的非类型参数不需要typename
,除非类型合格且依赖于某些类型参数
在你的第一个表格中:
template<typename std::list<int>::value_type value> //you don't require typename since qualified name value_type isn't dependent, so it's avoided by compiler I guess
int silly()