POOPE 发表于 2021-7-30 17:11:57

typename的两个作用

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是一种用户自定义的类型。




文档来源:51CTO技术博客https://blog.51cto.com/u_6220803/3198644
页: [1]
查看完整版本: typename的两个作用