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

标签 c++ type-conversion typedef

我正在使用 typedef float engtypetypedef double engtype 快速在 floatdouble 之间切换测试。例如,当我这样做时

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;

关于C++ 使用 typedef 避免类型转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32002352/

相关文章:

c++ - IEEE 754-2008(密集十进制)的可用实现

c++ - Visual Studio 'non-standard syntax; use ' &' to create a pointer to member'

c++ - 格式化具有相似返回值的顺序 if 语句 (C++)

C++,从 utility:string_t 到 std::string 的转换在返回时崩溃

c - typedef 不透明指针到不透明指针

c++ - 复制构造函数、析构函数和赋值运算符。我们什么时候不需要它们?

c - 我如何在 OpenCL 中将标量转换/转换为 vector (反之亦然)

c++ - 从 64 位整数中提取 32 位

c - 在其他源文件中定义的外部变量和结构

iphone - Typedef 枚举设置和访问