【问题标题】:Loss of Precision Due To Implicit Casting When Passing Variable As Function Parameter将变量作为函数参数传递时由于隐式转换导致的精度损失
【发布时间】:2018-06-02 12:18:07
【问题描述】:
#include <iostream>
#include <cstdint>

void print (uint8_t in) {
    std::cout << (unsigned int) in << '\n';
}

int main() {
    uint16_t num = 257;
    print(num);

    int x;
    std::cin >> x;
}

由于八位截断,输出1

uint16_t -&gt; uint8_t

0000 0001 0000 0001 -&gt; 0000 0001

当 num 从 uint16_t 转换为 uint8_t 时,有什么方法可以让编译器警告精度损失?还是我错过了什么?

【问题讨论】:

  • 有没有办法让编译器发出警告...?。提及您使用的编译器是获得相关答案的关键,您不觉得吗?对于 gcc/clang,-Wconversion 将发出警告。

标签: c++ casting type-conversion implicit-conversion


【解决方案1】:

由于您没有提及您正在使用的编译器,我不得不猜测一下。 在 Visual Studio 中,必须激活 2 级或更高级别的警告才能获得警告 C4244“从 'type1' 转换为 'type2',可能丢失数据”。

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2019-03-11
    • 1970-01-01
    • 2015-04-19
    • 2018-02-01
    相关资源
    最近更新 更多