将变量作为函数参数传递时由于隐式转换导致精度损失
Loss of Precision Due To Implicit Casting When Passing Variable As Function Parameter
#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 -> uint8_t
0000 0001 0000 0001 -> 0000 0001
当 num 从 uint16_t
转换为 uint8_t
时,有什么方法可以让编译器警告精度丢失?还是我遗漏了什么?
既然你没有提到你使用的编译器,我就只能猜测了。
在 Visual Studio 中,必须激活 2 级或更高级别的警告才能获得警告 C4244 "conversion from 'type1' to 'type2', possible loss of data"。
#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 -> uint8_t
0000 0001 0000 0001 -> 0000 0001
当 num 从 uint16_t
转换为 uint8_t
时,有什么方法可以让编译器警告精度丢失?还是我遗漏了什么?
既然你没有提到你使用的编译器,我就只能猜测了。 在 Visual Studio 中,必须激活 2 级或更高级别的警告才能获得警告 C4244 "conversion from 'type1' to 'type2', possible loss of data"。