C++ 使用 typedef 避免类型转换警告

C++ avoid type conversion warning with typedef

我正在使用 typedef float engtypetypedef double engtypefloatdouble 之间快速切换以进行一些测试。例如,当我这样做时

engtype rmwt = 20.75;
engtype Rgas = 8314.28 / rmwt;

编译器抱怨从 double 转换为 engtype 可能会丢失或截断数据。为了让那个警告消失我做了这个

engtype rmwt = 20.75;
engtype Rgas = static_cast<engtype>(8314.28) / rmwt;

这似乎有点可笑。我在谷歌上搜索了一种方法,使其默认为 engtype 但没有找到任何东西。 typedef 的这种用法不正确吗?我应该如何处理这些警告?我知道我可以忽略它们,但应该有一种 "correct" 方法来清除它们。

您对 typedef 的使用是正确的。要处理警告,您必须使用 static_cast(NUMBER).

你的常量是双精度的,这就是为什么它在转换为浮点数时会报错。如果你让它们漂浮:

engtype rmwt = 20.75F;

然后它将 float 转换为 double,或将 float 转换为 float,编译器不会报错。

要初始化浮点值,您必须使用 "f" 后缀 例如

auto pi = 3.14 ;      // pi type is double in this case

要分配浮点值,您应该使用 f 后缀

auto pi = 3.14f;         // pi type is deduced to float

因此,当您更改 typdef 时,您是在将双精度值分配给浮点类型。

您无法更改 8314.28 的含义:它是 double,句点。

可以做的是使用关联的用户定义文字完成您的 typedef :

engtype operator ""_eng (long double d) {
    // Add a cast here if the compiler still complains
    return d;
}

获得:

auto rmwt = 20.75_eng;
auto Rgas = 8314.28_eng / rmwt;