社区讨论
cstdint 你的跨平台~
学术版参与者 12已保存回复 16
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 16 条
- 当前快照
- 1 份
- 快照标识符
- @mlivg47u
- 此快照首次捕获于
- 2026/02/12 11:00 上周
- 此快照最后确认于
- 2026/02/14 16:15 5 天前
如果你使用 int64_t 代替 long long,你会惊喜的发现如下代码 CE 了:
CPPint64_t a = 114514;
a = max(0ll, a - b);
并且你本地很可能非常正常。原因在于,Linux 下 long 类型(long int 与 unsigned long int)都是 64 位的,而 win 下这些是 32 位的(bitset 里有同样的坑)。int64_t 在 Linux 的某些标准库实现中可能被 define 为了 long int,而 0ll 的类型是 long long,会变成 long long int,这样就会模板实例化失败。
这个设计一方面是 Windows 和 Linux 系统设计的不统一,另一方面是 max 函数设计的缺陷。
总之小心这个东西在正赛里爆炸。
回复
共 16 条回复,欢迎继续交流。
正在加载回复...