版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fanhansheng/article/details/82384539
1.typename与class的区别
关键字typename被用来作为型别之前的标识符号。
template <class T>
class MyClass{
typename T::SubType * ptr;
...
};
class Q{
typedef int SubType;
...
};
class Q{
class SubType;
...
};
在这里,typename指出SubType是class T中定义的一个类别,因此ptr是一个指向T::SubType型别的指针。如果没有关键字typename,SubType会被当成一个static成员,*会被解释为乘法。
注意,如果要把一个template中的某个标识符号指定为一种型别,就算是意图显而易见,关键字typename也是不能省略的,因此C++的一般规则是,除了使用typename修饰之外,template内的任何标识符号都被视为一个值而不是一个型别。
2.空类调用默认产生的函数
class test
{
public:
test(); // 缺省构造函数
test( const test& ); // 拷贝构造函数
~test(); // 析构函数
test& operator=( const test& ); // 赋值运算符
test* operator&(); // 取址运算符
const test* operator&() const; // 取址运算符 const
};
默认构造函数
析构函数
拷贝构造函数
赋值运算符(operator=)
取址运算符(operator&)(一对,一个非const的,一个const的)