找回密码
 欢迎注册
楼主: gxqcn

[分享] 发现微软编译器三路比较运算(<=>)的一个大 bug!

[复制链接]
发表于 2020-3-19 16:02:27 | 显示全部楼层
能稳定地干活才是硬道理!
你说的有一定道理,在生产环境下,一般是避免追新的,这里其实是有历史包袱问题。
但郭老大的这个软件其实没什么历史包袱,甚至可以完全重来,这种情况下,紧跟新潮流是正常举动。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-3-19 16:05:50 | 显示全部楼层
而且,我感觉郭老大是一个追求极致的人,要求完美无瑕,这种情况当然是使用新标准更好了,毕竟,十几年来,标准的更新不也这个目标吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-3-19 16:55:24 | 显示全部楼层
知我者,风云剑也
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-3-25 14:27:18 | 显示全部楼层
VS2019 今天刚推出了更新 16.5.1,经测试,仍未修复
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-3-27 12:38:47 | 显示全部楼层
我搜了下, 三路比较运算符<=> 是 C++20才引入的,  根据编译器支持清单来看, https://zh.cppreference.com/w/cpp/compiler_support
说是 VS编译器的版本 19.20*         开始支持.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-3-27 14:23:05 | 显示全部楼层
现在最新的 _MSC_VER 被定义为 1925,即表示 MS VC++ 编译器主版本号为 19,次版本号为 25;
上面链接提到的 19.20*,在 ToolTip 中提示为“VS 2019 16.0”,也就是说微软对该标准早就实现了,只是略有瑕疵。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-3-28 09:39:12 | 显示全部楼层
太新了. MSVC都跑到前头了, gcc 要 版本10 才支持. 而 https://gcc.gnu.org/ 上还没有正式公开10的下载链接...
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-3-28 11:08:22 | 显示全部楼层
这个按照我的理解, 还不能说是三路比较运算符的bug, 因为代码里面争议比较大的 是{}初始化, 我一般都是在表达式里 慎用多个++的.
  1. const auto cmp{ ++a <=> ++b }
复制代码
  1. const auto cmp{ *++p1 <=> *++p2 }
复制代码

我们换成
  1. ++p1; ++p2;
  2. const auto cmp{ *p1 <=> *p2 };
复制代码
就没事了.
=========
这里面的争议是我们用表达式来初始化变量.  这个表达式的运算应该 是在 编译阶段完成的.  编译阶段如果做不到就会退化成 普通表达式, 在运行期 来做.
..

点评

有道理, 按照 函数调用来理解 是 合法的...  发表于 2020-3-28 11:30
避坑的方法我在1楼中有说明,与你的相同;但按 C++ 标准,函数调用不该有此特别的附加设定,所以为 bug 是确诊的了。  发表于 2020-3-28 11:22
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-3-28 11:09:09 | 显示全部楼层
现在 MS 对标准的支持越来越好了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-3-28 13:18:49 | 显示全部楼层
YouTube上有一个视频, 叫做 Forbidden C++ , 就是枚举一些C++里用C的特性的时候出现的各种坑,比如全局变量,  宏, goto, using namespace,  娱乐性很强, .

https://youtu.be/j0_u26Vpb4w
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-7 05:24 , Processed in 0.023851 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表