【问题标题】:Is "auto" safe from the integer overflow in C++17?“自动”对 C++17 中的整数溢出安全吗?
【发布时间】:2017-09-02 17:08:19
【问题描述】:

如果我这样写代码:

auto n = 2048 * 2048 * 5;
char* buf = new char[n];

那么,auto 推导类型对 C++17 中的整数溢出安全吗?

【问题讨论】:

  • 2048 * 2048 * 5 被推导出为int 无论溢出。推论只关心类型,而不关心值。
  • 我很好奇,是什么让你专门询问 C++17?
  • @Borgleader C++17 是最新版本的 C++。
  • auto 不会神奇地修复溢出或更改变量类型。它只是告诉编译器“请找出这里的类型”,而不是你自己写。
  • @Barry 16 位整数?

标签: c++ c++17 integer-overflow auto


【解决方案1】:

C++ 中的20485 有一个类型,该类型是int。将两个 int 相乘有一个类型,该类型是 int。有些值的结果无法放入 int,而 auto 无法阻止。

auto 可以防止意外缩小结果,例如:

short x = 4 * 8192;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 2017-08-14
    • 2022-01-07
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多