C_and_CPP 板


LINE

開發平台(Platform): (Ex: Win10, Linux, ...) win 10 / linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) G++ / VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我在做大數的library(作業) 請問為什麼在做<<的時候,obj一定要用const? 如果不是const的話,會編譯不過。 餵入的資料(Input): //a,b,c是class cout << a*b; // 這樣打會編譯失敗 cout << a; // 但是這樣打可以 c=a*b; cout << c; // 這樣打也可以 預期的正確結果(Expected Output): 加上const 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) ostream & operator << (ostream & str, const BigNum & obj) 作業已經demo了 貼上來應該沒關係 http://ideone.com/ifYD2i 補充說明(Supplement): 在visual studio 裡面可以編譯成功,但是g++會失敗。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.91.189
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1493665465.A.3CF.html ※ 編輯: moebear (140.113.91.189), 05/02/2017 03:05:01
1F:推 steve1012: 為什麼都不付一下source code 05/02 03:09
2F:→ moebear: 我覺得比較屬於概念性的問題 05/02 03:11
3F:推 steve1012: 看起來是因為你用lvalue ref. 不能抓temporary variabl 05/02 03:17
4F:→ steve1012: e 05/02 03:17
5F:→ steve1012: a*b是rvalue吧 05/02 03:17
6F:推 steve1012: 沒付code 的話可以盡量解釋清楚一點 這樣大家比較好找 05/02 03:24
7F:推 steve1012: 問題 像是什麼是''obj 一定要const?'' 是指 overload 05/02 03:24
8F:推 steve1012: 的operator 的參數是const 還是在說你傳進去的物件一 05/02 03:24
9F:推 steve1012: 定要是const 預期的正確結果那邊寫一個加上const 也 05/02 03:25
10F:推 steve1012: 不太清楚是什麼東西加上const 05/02 03:25
11F:→ moebear: 主要就是程式碼那邊的那行 為什麼要加上const 05/02 03:26
12F:→ moebear: *會return一個我定義的class. BigNum 05/02 03:30
13F:推 steve1012: C++不允許你直接抓temporary object 然後改他的值 所以 05/02 03:39
14F:→ steve1012: 你要用const lvalue reference 05/02 03:39
15F:→ steve1012: 當然現在有rvalue reference 能做這件事(改值) 05/02 03:40
16F:推 steve1012: 概念是 a*b是一個temporary object. 你並沒有給他一個 05/02 03:45
17F:→ steve1012: 名字 所以他馬上就會消失 讓user 改他的值並沒有什麼意 05/02 03:45
18F:→ steve1012: 義(可能還有別的考量點) 05/02 03:45
19F:推 johnhmj: 你有沒有寫 BigNum& operator*(const BigNum& obj)? 05/02 07:19
20F:→ hunandy14: 記得是規範 但是規範跟實作是兩回事編譯器守不守他的事 05/02 11:50
21F:→ hunandy14: 大前提很明白 obj 你不會動到 所以加上const 05/02 11:51
22F:→ hunandy14: ostream 你需要動到他不能加 const 05/02 11:51
23F:→ hunandy14: 這裡 a*b 返回值是 const 所以你參數不加會找不到 05/02 11:54
24F:→ hunandy14: 更正 rvalue ^const 05/02 11:58
25F:推 steve1012: Bind rvalue 要麼用rval reference 要麼用const lvalue 05/02 12:54
26F:→ steve1012: reference 05/02 12:54
27F:推 s4300026: 我猜是重載運算子,右側變數加上const 05/02 18:51
28F:→ pttworld: 貼一下你的乘,回傳是什麼 05/02 19:35
29F:→ moebear: 回傳是BigNum 我定義的class 05/02 20:19
※ 編輯: moebear (140.113.91.189), 05/02/2017 20:22:44
30F:→ hunandy14: 應該是要你傳 op*() 前面是什麼 有沒有 * & const 05/02 20:25
31F:→ hunandy14: 還是就什麼都沒有~ 05/02 20:25
32F:→ moebear: 已補充程式碼 05/02 20:47
33F:→ moebear: 看起來應該是因為他是暫存的值 不能用ref去傳入 05/02 21:07
34F:→ moebear: 我試著把const跟&一起拿掉就可以了 05/02 21:08
35F:→ hunandy14: 一起補上是比較好的 05/02 22:06
36F:→ hunandy14: cst BigNum op*(cst BigNum& A2, cst BigNum& B2) 05/02 22:08
37F:→ hunandy14: istream& op>>(istream& str, cst BigNum& obj) 05/02 22:09
38F:推 steve1012: 暫存值可以傳 只是規定要const lval reference 或是傳c 05/02 22:41
39F:→ steve1012: opy 但傳copy 可能不efficient 05/02 22:41
40F:推 steve1012: 傳lvalue reference 是一個& rvalue 是兩個&& 05/02 22:42
41F:推 Killercat: 話說你可以直接解釋一下 你的case為什麼可能非const? 05/03 19:13
42F:→ moebear: 什麼意思 05/03 20:45
43F:推 Killercat: "請問為什麼在做<<的時候,obj一定要用const?" 05/04 07:29
44F:→ Killercat: 答案是這是operator spec,然而這spec對你來講有什麼 05/04 07:30
45F:→ Killercat: case讓你碰到困難,一定得mutable嗎? 05/04 07:30
46F:→ Killercat: 可以提出來大家幫你看看 拿一下主義 05/04 08:11
47F:→ Killercat: 誒,我好像有點誤解你問的問題,我看看 05/04 08:12
48F:→ Killercat: 我剛幫你看了一下 clang看起來可以cout << a*b 05/04 08:23
49F:推 steve1012: 所以我一開始才說問問題要問清楚... 05/04 14:51







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