【发布时间】:2016-08-23 06:27:33
【问题描述】:
我最近刚刚注意到我正在使用的框架中的一些代码将某些变量转换为双精度值,然后在框架访问它们时返回。在 C++11 标准中,这是否保证在不损失任何整数类型的精度的情况下工作?如果是这样,是哪个?在常见的实现中,是否有任何其他类型对于这种转换是普遍安全的?
另外,有没有办法在编译时检查以这种方式进行的转换是否安全?基本上我想要这样的东西:
static_assert(T(double(T type))==type);
【问题讨论】:
-
您在自己的代码中使用了哪些类型?您是否有理由不使用
double来避免这些转化? -
@Code-Apprentice 类型由框架设置(即我无法更改它们)。例如,
m_type在内部是一个unsigned int,但是当通过框架访问它时,它被转换为一个double。 -
@Code-Apprentice 此外,我将它们转换回原始类型以节省空间。之后我对它们进行序列化,即使进行了这种转换,它仍然占用大约 TB 的空间,所以在这个级别上的优化非常重要。
-
我不认为你可以对框架的内部做很多事情。
-
@Code-Apprentice 我同意。我的问题是,例如,从
unsigned int到double再到unsigned int的转换是否会成为问题(即,是否可以返回与原始内容不同的位)。如果是这样,我将不得不完全放弃框架并找出其他东西。如果没有,那么一切都很好。
标签: c++ c++11 type-conversion