[問題] vs2015 and vs2017 隱式轉換

看板C_and_CPP作者 (Joe)時間6年前 (2018/02/04 17:10), 編輯推噓3(3012)
留言15則, 5人參與, 6年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) vs 2015, vs2017 問題(Question): 相同的Code vs2015 : 正確沒有錯誤 vs2017 : (多個相同錯誤) 沒有可接受的轉換 想請問一下有辦法讓vs2017正確編譯嗎(不使用 disable) 預期的正確結果(Expected Output): vs2015: no error vs2017: no error 錯誤結果(Wrong Output): vs2015: no error vs2017: 沒有可接受的轉換 程式碼(Code):(請善用置底文網頁, 記得排版) 錯誤都在operator + - / * 注: 會取這個標題是因為原本vs2017連 fraction += 1 都不給我轉換 但是PO文的時候卻變成可以 但是operator +-*/仍然不給轉 header: http://codepad.org/JIfcHK3v source: http://codepad.org/cN50bupE -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.145.23 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1517735422.A.EF3.html

02/04 17:14, 6年前 , 1F
我的理解是 因為我是給他一個contructor所以沒辦法用
02/04 17:14, 1F

02/04 17:15, 6年前 , 2F
參照接收,但VS2015就可以,這不公平
02/04 17:15, 2F

02/04 18:16, 6年前 , 3F
Fraction(lhs)是右值,operator+=第一個參數只吃左值
02/04 18:16, 3F

02/04 18:23, 6年前 , 4F
另外,operator+=宜設計成成員
02/04 18:23, 4F

02/04 18:40, 6年前 , 5F
第一句什麼意思,第二句我也想知道原因QQ
02/04 18:40, 5F

02/04 19:47, 6年前 , 6F
關鍵字 right value/ left value
02/04 19:47, 6F

02/04 22:47, 6年前 , 7F
謝謝你們 我知道錯在哪了
02/04 22:47, 7F

02/04 22:48, 6年前 , 8F
但我還是想知道 為什麼要使用成員含式 我之前有看一篇
02/04 22:48, 8F

02/04 22:49, 6年前 , 9F
他寫: 不用成員的好處是因為可以讓另一個可以隱轉的
02/04 22:49, 9F

02/04 22:49, 6年前 , 10F
class T 也能使用該函式 那為什麼 += 就不需要
02/04 22:49, 10F

02/04 23:23, 6年前 , 11F
轉型後是右值
02/04 23:23, 11F

02/05 00:45, 6年前 , 12F
A += B 有 A = A + B 的意思在, 所以左邊至少要能收東西
02/05 00:45, 12F

02/05 00:45, 6年前 , 13F
因為這個語意的關係它不會有運算子左邊隱式轉型的問題
02/05 00:45, 13F

02/05 09:21, 6年前 , 14F
+=沒運算元交換的問題,exceptional c++ item 20有詳
02/05 09:21, 14F

02/05 09:21, 6年前 , 15F
述理由
02/05 09:21, 15F
文章代碼(AID): #1QTit-xp (C_and_CPP)