[问题] 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