我正在使用typedef float engtype
和typedef double engtype
在float
和double
之间快速切换以进行某些测试。当我这样做时,例如
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
的使用不正确吗?我该如何处理警告?我理解我可以忽略它们,但应该有一种“正确”的方法来清除它们。
答案 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值。