c++使用typedef避免类型转换警告
C++ avoid type conversion warning with typedef
我使用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
的这种用法不正确吗?我应该如何处理这些警告?我知道我可以忽略它们,但是应该有一个"正确"的方法来清除它们。
你不能改变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;
你的常量是双精度,这就是为什么它在转换为浮点数时抱怨。如果你让它们成为浮动:
engtype rmwt = 20.75F;
然后将float类型转换为double类型,或者将float类型转换为float类型,编译器不会报错。
您对typedef的使用是正确的。要处理警告,必须使用static_cast(NUMBER)。
初始化float值必须使用"f"后缀例如
auto pi = 3.14 ; // pi type is double in this case
要分配浮点值u应该使用f后缀
auto pi = 3.14f; // pi type is deduced to float
所以当你改变typdef时,你是在给float类型赋双精度值
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- 将无符号转换为复杂<int>原因符号转换警告
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 在 C++ 中修复类型转换警告的最佳方法
- 使用 QThread 时的类型转换和 QThreadStorage 警告
- g++编译器选项,用于警告使用ublas::boundd_vector进行类型转换
- c++使用typedef避免类型转换警告