2struct作为数据结构typename和class的区别的实现体,它默认typename和class的区别的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的3“class”这个关键字还用于定义模板参数,就像“typename”但关键字“struct”不用于定义模板参数4 还是上面所说的,C++中的struct是对C中的struct的扩充,既然是;struct通常用于数据结构的实现,其默认的数据访问控制为public而class则通常用于对象的实现,其默认的成员变量访问控制为privateclass关键字还可用于定义模板参数,类似于typename然而,struct关键字并不用于定义模板参数在C++中,struct是对C语言中struct的扩展因此,它必须保留C中struct的所有特性;1默认的继承访问权限struct是public的,class是private的2struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的3“class”这个关键字还用于定义模板参数,就像“typename”但关键字“struct”不用于定义模板参数;实际上可以说没有区别按 C++ 标准来说,templatelttypename T 用于基础数据类型,typename 指类型名,T 可以取 char int double 等templateltclass T 用于类,T 可以取任何类但是这里有一个问题,结构体应该用 typename 还是 class? 结构体肯定不是基础数据类型,但也不是类所以实际情况是。
class B A private继承 struct C B public继承 2struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的3class”这个关键字还用于定义模板参数,就像“typename”但关键字“struct”不用于定义模板;除了class关键字,C++还提供了其他关键字如structtemplate等来定义不同的类型struct关键字与class关键字非常相似,主要区别在于默认访问权限在class中,默认访问权限是私有的,而在struct中,默认访问权限是公有的这种默认访问权限的区别使得struct在某些场景下更加适合用于定义轻量级的公共数据结构templ;1,一般情况下typename和class可以互换2,但是当需要表示某标识符是类型的时候用只能用typename而不能用class当要获得类的成员类型时,必须用typename 比如 template lttypename T class MyClass typename TSubType * ptr有了typeanme,SubType就被当成了T中定义的一个类型如果这里没有ty。
6再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点“class”这个关键字还用于定义模板参数,就像“typename”但关键字“struct”;但typename和class的区别我上面却没有用“唯一”,而是说的“最本质”,那是因为,它们确实还有另一个区别,虽然那个区别我们平时可能很少涉及那就是“class”这个关键字还用于定义模板参数,就像“typename”但关键字“struct”不用于定义模板参数这一点在Stanley BLippman写的Inside the C++ Object Model有过说明;用来声明 template type parameter 时,没区别 用在 type specifier 中, typename 只能用于 qualifiedid 之前,指定这个 qualifiedid 表示一个类型 class 可以用于 qualifiedid 之前也可以用于 unqualifiedid 之前,指定这个 qualifiedid 表示一个 classname不是 typedefname,对于 unqualified;在VC6里,class可以与模板关键字typename互换,但是struct好像就不可以,编译好像通不过对这个问题,我专门查了一些资料,发现网上确实有说 struct不能用于模板关键字而class可以,这似乎应该是他们的一个不同了然而,我又看了一下 深度探索C++对象模型,在书的前几章好像就是第一章Lippman;很多文献上也确实只提到这一个区别但我上面却没有用“唯一”,而是说的“最本质”,那是因为,它们确实还有另一个区别,虽然那个区别我们平时可能很少涉及那就是“class”这个关键字还用于定义模板参数,就像“typename”但关键字“struct”不用于定义模板参数这一点在Stanley BLippman写的Inside the C++。
typename和class在C++的模板类型参数声明中的作用完全相同在C++的模板类型参数声明中,typename和class这两个关键字都用来指示后面的标识符是一个类型参数无论是使用template还是template,它们都表示T是一个类型这两个关键字可以互换使用,没有实质性的区别但是,当涉及到嵌套依赖类型时,typename关键;结构体不是类可以这样想,C语言是面向对象的语言,并且有结构体这种数据类型对于C语言来说,没有类的概念,因此结构体不是类。
至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点“class”这个关键字还用于定义模板参数,就像“typename”但关键字“struct”不用于定义模板参数。
还没有评论,来说两句吧...