免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 872 | 回复: 0
打印 上一主题 下一主题

C++Primer笔记之一 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-16 21:14 |只看该作者 |倒序浏览

                                C++Primer笔记之一
模板编译
作者: gwlee
当编译器看到模板定义的时候,它不立即产生代码。只是在看到用到模板时,如调用了函数或调用了类模板的对象的时候,编译器才产生特定类型的模板实例。
一般而言,当调用函数的时候,编译器只需看到函数的声明。类似地,定义类类型的对象时,类定义必须可用,但成员函数定义不是必须存在的。因此,应该将类定义和函数声明放在头文件中,而普通函数和类成员函数的定义放在源文件中。
模板则不同:要进行实例化,编译器必须能够访问定义模板的源代码。当调用函数模板或类模板的成员函数的时候,编译器需要函数定义,需要那些通常放在源代码中的代码。
标准C++为编译模板定义了两种模型:“包含”模型和“分别编译”模型。在两种模型中,构造程序的方式很大程度上是相同的:类定义和函数声明放在头文件中,而函数定义和成员定义放在源文件中.
这两种模型不同之处在于,编译器怎样使用来自源文件的定义而已.
注:所有编译器支持第一种,即“包含“模型。只有部分编译器支持第二种,“分别编译”模型。
同时,"THINGKING IN
C++"书中提到,即使在创建非内联函数定义时,我们还是通常想把模板的所有声明和定义放入一个头文件中。这似乎违背了通常的头文件规则:“不要放置分配
存储空间的任何东西”(主要是防止在连接期间的多重定义错误),但模板定义很特殊。在template之后的任何东西都意味着编译器在当时不为它分配空间,而是一直处于等待状态知道被一个模板示例告知。在编译器和连接器中有机制能去掉同一模板的多重定义。
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/71520/showart_1901896.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP