C++的一道选择题
(25)关于关键字class和typename,下列表述中正确的是______。A)、程序中的typename都可以替换为classB)、程序中的class都可以替换为t...
(25)关于关键字class 和typename,下列表述中正确的是______。
A)、程序中的typename 都可以替换为class
B)、程序中的class 都可以替换为typename
C)、在模板形参表中只能用typename 来声明参数的类型
D)、在模板形参表中只能用class 或typename 来声明参数的类型 展开
A)、程序中的typename 都可以替换为class
B)、程序中的class 都可以替换为typename
C)、在模板形参表中只能用typename 来声明参数的类型
D)、在模板形参表中只能用class 或typename 来声明参数的类型 展开
展开全部
如果是考试,选 D ;如果是分析试卷,没有答案。
题目本身只是在考基础知识,没什么好说的。
但,好多人不知道的是,D 也是错的,模板参数的类型还可以是模板,虽然这种情况不是很常用,但 stl 中就有,比如 vector、map 等,都有不是 class 的类型参数。
比如:
template < template <int> B_ >
class A
{
// 不详细写了
public:
int foo(void){ return B_<5>::size_; }
};
用的时候可以:
template <int iSize_>
struct Array_x
{
enum { size_ = iSize_ };
};
A< Array_x > a;
int i = a.foo();
题目本身只是在考基础知识,没什么好说的。
但,好多人不知道的是,D 也是错的,模板参数的类型还可以是模板,虽然这种情况不是很常用,但 stl 中就有,比如 vector、map 等,都有不是 class 的类型参数。
比如:
template < template <int> B_ >
class A
{
// 不详细写了
public:
int foo(void){ return B_<5>::size_; }
};
用的时候可以:
template <int iSize_>
struct Array_x
{
enum { size_ = iSize_ };
};
A< Array_x > a;
int i = a.foo();
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询