C_and_CPP 板


LINE

※ 引述《WanCW (笨狐狸)》之铭言: : ※ 引述《myselves (...)》之铭言: : : 而copy constructor的型态未必要跟class本身一样 : : 例如 Xxxxx(const Yyyyy &rhs); 是可以的(通常都是Xxxxx(const Xxxxx &rhs);) : : 当 : : Yyyyy y; : : Xxxxx x = y; //这时候 Xxxxx(const Yyyyy &rhs)会被呼叫 : 只有型态完全相同的, 才会被视为 Copy Constructor. Y y1; X x1 = y1; 这种写法,在「语意」上,是以 y1 为引数,呼叫 X(const Y&) 以产生一个 X 的暂时物件,然後再以这个 X 的暂时物件做引数, 呼叫 X(const X&) 来建构 x1 这个 X 的物件。「语意」上是如此, 但在compiler实作上,C++ 标准容许其做最佳化,呼叫 X(const Y&) 时,就直接建构出 x1, 而不是执行 X(const Y&) 只产生过渡性的 暂时物件,接着再呼叫 X(const X&) 才终於建构出 x1。由於许多 编译器都有做这种最佳化,因此很容易让人误以为只需要有 X(const Y&) 就能写 X x1 = y1; Anyway,编译器仍然得要求程式符合需要两层建构子的「语意」限制, 也就是说,即使是做这种最佳化的编译器,仍然得先检查 X(const X&) 这个建构子是不是能够被存取以执行,否则,就不能通过编译。例如: class Y {}; class X { public: X() { cout << "X()\n"; } X(const Y&) { cout << "X(const Y&)\n"; } X(const X&) { cout << "X(const X&)\n"; } }; int main() { Y y1; X x1 = y1; } 上述可以通过编译,并正确执行( <iostream>等等请自己加:)。但是 若动个手脚,将 X(const X&)移到 private: 区,那就不行通过编译啦。 class Y {}; class X { public: X() { cout << "X()\n"; } X(const Y&) { cout << "X(const Y&)\n"; } private: X(const X&) { cout << "X(const X&)\n"; } }; int main() { Y y1; X x1 = y1; } Comeau compiler 的错误讯息说得很清楚: error: "X::X(const X &)" is inaccessible (Even though the copy was eliminated, the standard still requires it to be accessible) X x1 = y1; ^ 这样就可看出 X(const X&) 对於 X x1 = y1; 这个叙述的必要性了。 当然,若根本不宣告 X(const X&) 的话,compiler 依标准会默默地 (implicitly)帮我们生出一个来,那当然还是可以编译执行的。 --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.208.168
1F:推 elsvent:要注意的是有用到pointer就要小心了 61.62.218.129 06/22
※ 编辑: khoguan 来自: 220.130.208.168 (06/23 11:53)







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灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP