【发布时间】:2018-10-17 14:54:27
【问题描述】:
在 C++11/14 中是否有“安全”替代 static_cast 或实现此功能的库?
我所说的“安全”是指强制转换应该只允许不丢失精度的强制转换。所以从int64_t 到int32_t 的转换只有在数字适合int32_t 时才被允许,否则会报告错误。
【问题讨论】:
-
您希望这是一个运行时错误吗?还是成为可能会丢失数据/精度的编译时警告/错误?
-
是的,安全的替代方案根本不做演员
-
C++ 没有内置任何东西。尽管
numeric_limits将其实现为一个会引发异常或执行运行时断言的函数是微不足道的。 -
您是否打开了编译器警告?在某些情况下(不是 static_cast,而是将较大的类型初始化或分配给较小的类型)编译器会警告精度损失。
标签: c++ c++11 type-safety narrowing