顾名思义,typename有双重含意.只要你用过template,那么第一重含意一定知道,那就是声明模板的时候,我们既可以这样写: template <class T> 也可以这样写 template <typename T> 这两种写法并没有任何区别,都是标记T可以是符合隐式接口的任何类型,包括系统预定义类型,也包括用户自定义类型. typename的第二重含意其实不大能遇到,因为这个依赖于编译器,看下面的例子: class SampleClass { public: typed…
声明template参数时,前缀关键字class和typename可互换. 请使用关键字typename标识嵌套从属类型名称:但不得在base class lists(基类列)或member initialization list(成员初值列)内以它作为base class修饰符.…
1.在template声明中,class与typename是等价的,但是使用typename更好. 2.在template实现中,模版形参是从属名称,嵌套在模版形参中的类型是嵌套从属名称,不依赖任何template参数的名称,称为非从属名称. 3.嵌套从属名称,可能会导致解析困难,出现二义性.比如:C::const_iterator* x; 有两种意思.一是:模版形参C中有个静态字段const_iterator,然后计算它与x的乘积:二是:模版形参C中有个嵌套类型const_iterator,定…
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:声明 template 參数时,前缀keyword class 和 typename 可互换. 请使用keyword typename 标识嵌套从属类型名称: 演示样例1: template<typename C> void print2nd(const C &container){ C::const_iterator *x;//歧义.假设const_iterator是个s…
typename在很多种情况下与class是完全相同的,例如下面的使用: templame<typename T> ...... template<class T> ...... 条款42:了解typename的双重含义 template<typename C> void print2nd(const C containter) { ){ C::const_iterator iter(containter.begin()); ++iter; int value = *i…
Charpter 1. 让自己习惯C++   条款01: 视C++为一个语言联邦 条款02: 尽量以const,enum,inline替换#define 条款03: 尽可能使用const 条款04: 确定对象被使用前已先被初始化 Charpter 2. 构造/析构/赋值运算                           条款05: 了解C++默默编写并调用哪些函数 条款06: 若不想使用编译器自动生成的函数,就该明确拒绝 条款07: 为多态基类声明virtual析构函数 条款08: 别让异…
我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 7 模版与泛型编程 Templates and Generic Programming 本章无法使你成为一个专家级的template程序员,但可以使你成为一个比较好的template程序员.本章也会给你必要信息,使你能够扩展你的template编程,到达你所渴望的境界. 条款41 : 了解隐式接口和编译器多态 在oop的世界里,我们总是以显式接口(explici…
阅读此笔记前,请先阅读 <Effective C++>第二版笔记  和  <More Effective C++>笔记 这里只记录与上面笔记不同的条款,主要是 "面对对象+模板+内存管理" 三个方面 1.视 C++ 为一个语言联邦 可以分为 C.C with Object.Template C++.STL 四个次语言,不同次语言的高效编程守则可能不一样,比如 C 部分 pass-by-value 通常比 pass-by-reference 高效,而对于 Obje…
看完Effective C++才觉得平时程序设计时需要注意的一些问题,有一定的收获,不过因为没什么项目实践, 并未很深入了解具体情况如何,还需后继实践~ 列举一下55个条款: 1. 视C++为一个语言联邦. 2. 尽量以const, enum ,inline 替换#define a)  对于单纯常量,最好以const 对象或 enum 替换 #define b)  对于形似函数的宏,最好改用inline 函数替换 #define 3. 尽可能使用const a)  将某些东西声明为const可帮…