评论

收藏

[C++] typename的两个作用

编程语言 编程语言 发布于:2021-07-30 17:11 | 阅读数:445 | 评论:0

C++中,typename的作用有两个:
1.模板中用于引入一个模板参数
2.当访问一个类或结构体中的自定义类型的时候,用typename修饰,防止语法歧义。
考虑以下代码:
template‹typename T>
void foo(const T& t)
{
// 声明一个指向某个类型为T::bar的对象的指针
T::bar* p;
}
struct StructWithBarAsType
{
typedef int bar;
};
int main()
{
StructWithBarAsType x;
foo(x);
}
函数foo中,编译器根本不知道T::bar是什么数据类型,甚至他会以为这是一个T中的一个变量。所以为了防止这种歧义,我们应该用typename来标识。typename T::bar* p;
这样编译器就指导,bar是一种用户自定义的类型。




关注下面的标签,发现更多相似文章