2012年3月9日

摘要: 如果你有一个合适的名字来指定一个类型,并且这个名字依赖于模板的参数,请使用关键字 typename。在模板的声明和定义中只使用关键字typename。下面的例子说明使用关键字typename。1 template<class T> class A2 {3 T::x(y);4 typedef char C;5 A::C d;6 }表达式 T::x(y) 是含糊不清的。它可能是一个调用非本地参数值 y 的函数 x() ,也可能是一个声明类型为 T::x 的变量 y 。C++将把这句表达式理解为一个函数的调用。为了让编译器把这句表达式理解为一个类型,你应该在表达式的开头添加关... 阅读全文

posted @ 2012-03-09 22:29 一年级的小学生 阅读(388) 评论(0) 推荐(0) 编辑

摘要: C++中,对于自定义的类比如GCStudent,需要声明并且初始化一个对象。GCStudent stu;GCStudent stu1 = stu;对于第一个stu的声明,系统肯定会去调用系统默认的构造函数。但是对于第二个stu1,系统调用的构造函数并不是系统默认的构造函数,而是调用拷贝构造函数。但是如果我们这样声明GCStudent stu;GCStudent stu1;stu1 = stu;这个时候stu1和stu2都调用默认的构造函数,在stu1赋值的时候,调用系统的等号运算符重载。其原理,一个类的对象必须调用一次构造函数,而且一个运算符肯定不可能出现歧义,因此对于第一种情况,= 号在这里 阅读全文

posted @ 2012-03-09 13:20 一年级的小学生 阅读(377) 评论(0) 推荐(0) 编辑