[問題] vs2015 and vs2017 隱式轉換

作者: qwer87511 (Joe)   2018-02-04 17:10:18
開發平台(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
作者: qwer87511 (Joe)   2018-02-04 17:14:00
我的理解是 因為我是給他一個contructor所以沒辦法用參照接收,但VS2015就可以,這不公平
作者: loveflames (咕啾咕啾魔法陣)   2018-02-04 18:16:00
Fraction(lhs)是右值,operator+=第一個參數只吃左值另外,operator+=宜設計成成員
作者: qwer87511 (Joe)   2018-02-04 18:40:00
第一句什麼意思,第二句我也想知道原因QQ
作者: Ommm5566 (56天團)   2018-02-04 19:47:00
關鍵字 right value/ left value
作者: qwer87511 (Joe)   2018-02-04 22:47:00
謝謝你們 我知道錯在哪了但我還是想知道 為什麼要使用成員含式 我之前有看一篇他寫: 不用成員的好處是因為可以讓另一個可以隱轉的class T 也能使用該函式 那為什麼 += 就不需要
作者: jerryh001   2018-02-04 23:23:00
轉型後是右值
作者: LPH66 (-6.2598534e+18f)   2018-02-05 00:45:00
A += B 有 A = A + B 的意思在, 所以左邊至少要能收東西因為這個語意的關係它不會有運算子左邊隱式轉型的問題
作者: loveflames (咕啾咕啾魔法陣)   2018-02-05 09:21:00
+=沒運算元交換的問題,exceptional c++ item 20有詳述理由

Links booklink

Contact Us: admin [ a t ] ucptt.com