CompBook 板


C++ Object Model 答客问 (1) 侯捷 [email protected] 2000.03.25 第一次发表於 清大.枫桥驿站(140.114.87.5).电脑书讯版(Computer/CompBook) 本文将於日後整理於 侯捷网站 侯捷网站:www.jjhou.com ---------------------------------------------------------------- FeiYu wrote (1999/12/29) : > Dear Sir: > 看了Inside C++ Object Model後,有几点想和你讨论: > > 1. 文中多次出现「内化」、「扩张」等词(尤其在constrctor) > 中译本内中英对照表并未加以标注,建议你把他加进去, > 因为这些字眼实在很少在其他书中看到。 > > 2. p.26中的程式: > void rotate (X datum,const X* pointer,const X& reference) > { > (*pointer).rotate (); > reference.rotate (); > datum.rotate (); > } // end function > 在VC中编译会出现转型上的错误,必须拿掉参数列const才可以执行。 > > 3. p52.中间: > ".....这情况下并不需要合成出一个default copy constructor, > 因为上述宣告展现了"default copy semantics"........." > 这段话应如何解释呢?怎样才算是default copy semantics? > "bitwise copy semantics"? > > 4. p.74 > 里面提到 member initialization list 在四种情形下可以 > 被使用(即使没有用,也可以正确编译,只是会造成效率不彰), > 但LIPPMAN没有说明为何会造成编译器对以两种不同方式设定初值, > 会扩展成为不同的码,是因为编译器设计上某种无法避免的需要? > 还是有其他的原因 > > 5. LIPPMAN书中常常会列出「经过扩展、内化」或是「转换」 > 过的原始码,藉由观察这些码,可以明显发现编译器暗中动了 > 哪些手脚,但这似乎是本书独有的特色,一般编译器多提供 > 机器码的对应,而不会列出pusedo code。不晓得这个说法 > 对不对(我现在用的是VC6) > > 谢谢 侯捷回覆: > 1. 文中多次出现「内化」、「扩张」等词(尤其在constrctor) > 中译本内中英对照表并未加以标注,建议你把他加进去, > 因为这些字眼实在很少在其他书中看到。 谢谢你的建议。以下举两个例子。 原书 p11: .. the likely internal transformation of the function looks as follows : 中译本 p13: .. 这个函式有可能被内化为: 换言之我在这里所使用的「内化」一词,并无直接对应的英文, 而是依上下文翻译。 原书 p38: .. the following two augmentations occur during compilation 中译本 p45: .. 下面两个扩张行动会在编译期间发生: 换言之这里我所使用的「扩张」一词,就是 augmentations。是的, C++ 编译器为我们加了许多码,是一种「扩张」行为。 > 2. p.26中的程式: > ... > 在VC中编译会出现转型上的错误,必须拿掉参数列const才可以执行。 好的,谢谢。各家编译器对 const 的松紧程度不一, BCB4 和 G++ 对於 p.26 的程式都只给予 warning。 > 3. p52.中间: > ".....这情况下并不需要合成出一个default copy constructor, > 因为上述宣告展现了"default copy semantics"........." > 这段话应如何解释呢?怎样才算是default copy semantics? > "bitwise copy semantics"? p53 中间偏下说得很清楚: .. 什麽时候一个 class 不展现出 "bitwise copy semantics" 呢? .. 有四种情况: .. 1. ... .. 2. ... .. 3. ... .. 4. ... 这四点以外的任何情况,便是拥有 "bitwise copy semantics" (亦即 "default copy semantics")。 > 4. p.74 > 里面提到 member initialization list 在四种情形下可以 > 被使用(即使没有用,也可以正确编译,只是会造成效率不彰), > 但LIPPMAN没有说明为何会造成编译器对以两种不同方式设定初值, > 会扩展成为不同的码,是因为编译器设计上某种无法避免的需要? > 还是有其他的原因 是因为 C++ 语言在设计上明白区分了 initialization 和 assignment 的不同。 你所谓「以两种不同方式设定初值」,意思是: (1) 使用 member initialization list (2) 不使用 member initialization list,而在 ctor 中使用 assignments. 为什麽编译器对於以两种不同方式设定初值,会扩展成为不同的码呢? 因为(以下节录自《C++ Primer 中文版》p719): --- quote --- 两种作法...差别在於唯有 member initialization list 才 提供 class data members 的初始化行为。 而在 constructor 函式内将数值设定给 data member,其行为是一种 指派(assignment)动作。两者差异视 data member 的型别而定。 有一个观念很重要,那就是把 constructor 的执行想像为两阶段: (1) 或隐喻(implicit)或明显(explicit)的初始化阶段 (initialization phase),(2) 一般化的运算阶段(computation phase)。 运算阶段由 constructor 函式内的所有述句组成,此阶段中对任何 data members 的设定动作都被视为一个指派动作(assignment), 而不是一个初始化动作(initialization)。如果不能够清楚区分出 其间的差异,便往往成为程式错误或效率不彰的来源。 初始化阶段可以是隐喻的(implicit),也可以是明显的(explicit), 视 member initialization list 是否存在而定。一个隐喻的初始化阶段 会唤起所有 base class 的 default constructors(根据 base class 的宣告 次序),然後再唤起所有 member class object 的 default constructors。 --- unquote --- > 5. LIPPMAN书中常常会列出「经过扩展、内化」或是「转换」 > 过的原始码,藉由观察这些码,可以明显发现编译器暗中动了 > 哪些手脚,但这似乎是本书独有的特色,一般编译器多提供 > 机器码的对应,而不会列出pusedo code。不晓得这个说法 > 对不对(我现在用的是VC6) 对。 你恐怕误会了 pusedo code 的意思。pusedo code 是意思是 以某种型式的语言表现出某些实际动作。Lippman 在本书中以 大家熟悉的 C++ 语言(是的,本书读者应该都已熟悉了 C++ 语言) 来表现 pusedo code。事实上 C++ 编译器当然不会为我们的码 「扩展、内化、或转换」出那样的高层语言。 -- the end  -- ※ Origin: 枫桥驿站<bbs.cs.nthu.edu.tw> ◆ Mail: [email protected]







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草
伺服器连线错误,造成您的不便还请多多包涵!
「赞助商连结」





like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP