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

时间:2015-08-14 04:36:46

标签: c++ type-conversion 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的使用不正确吗?我该如何处理警告?我理解我可以忽略它们,但应该有一种“正确”的方法来清除它们。

4 个答案:

答案 0 :(得分:1)

你的常数是双倍的,这就是为什么它在转换为浮点时会抱怨。如果你让它们漂浮:

engtype rmwt = 20.75F;

然后它将float转换为double,或者将float转换为float,编译器不会以任何方式抱怨。

答案 1 :(得分:1)

您无法更改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;

答案 2 :(得分:0)

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

答案 3 :(得分:0)

要初始化浮点值,您必须使用&#34; f&#34;后缀 例如,

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

要指定浮点值,你应该使用f后缀

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

因此,当您更改typdef时,您将为浮点类型指定double值。