作者qwer87511 (Joe)
看板C_and_CPP
标题[问题] vs2015 and vs2017 隐式转换
时间Sun Feb 4 17:10:18 2018
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1517735422.A.EF3.html
1F:→ qwer87511: 我的理解是 因为我是给他一个contructor所以没办法用 02/04 17:14
2F:→ qwer87511: 参照接收,但VS2015就可以,这不公平 02/04 17:15
3F:→ loveflames: Fraction(lhs)是右值,operator+=第一个参数只吃左值 02/04 18:16
4F:→ loveflames: 另外,operator+=宜设计成成员 02/04 18:23
5F:→ qwer87511: 第一句什麽意思,第二句我也想知道原因QQ 02/04 18:40
6F:推 Ommm5566: 关键字 right value/ left value 02/04 19:47
7F:→ qwer87511: 谢谢你们 我知道错在哪了 02/04 22:47
8F:→ qwer87511: 但我还是想知道 为什麽要使用成员含式 我之前有看一篇 02/04 22:48
9F:→ qwer87511: 他写: 不用成员的好处是因为可以让另一个可以隐转的 02/04 22:49
10F:→ qwer87511: class T 也能使用该函式 那为什麽 += 就不需要 02/04 22:49
11F:推 jerryh001: 转型後是右值 02/04 23:23
12F:推 LPH66: A += B 有 A = A + B 的意思在, 所以左边至少要能收东西 02/05 00:45
13F:→ LPH66: 因为这个语意的关系它不会有运算子左边隐式转型的问题 02/05 00:45
14F:→ loveflames: +=没运算元交换的问题,exceptional c++ item 20有详 02/05 09:21
15F:→ loveflames: 述理由 02/05 09:21