我知道C++中的不同的转换操作符已经在这里讨论了很多次,但我的问题是关于数字类型之间的转换,而不是C风格和C++风格操作符之间的一般差异.我认为这是一个完全不同的主题,而不是在类层次结构中进行投
假设我想将一个int i转换为double,我有一些选项
static_cast<double>(i)
(double) i
double(i)
Run Code Online (Sandbox Code Playgroud)
就个人而言,在这种情况下,我更喜欢第3行中类似于构造函数的样式,因为我想表达这不是演员类型类型,我当然会使用static_cast或dynamic_cast.
除了在文本编辑器中搜索时难以找到这种类型的演员表,我选择的任何缺点都有吗?
static_cast<double>(i)在这种特殊情况下,这无疑是最清楚地表达了您的意图。
在数字类型之间进行转换时,您通常距离未定义的行为只有一步之遥。所以一般情况下要小心。尽管您的转换是为 的每个可能值定义的i,但将 a 转换double为 anint 可能会溢出int,并且该行为在 C++ 中未定义。
我总是建议您检查目标类型是否可以容纳源类型。std::numeric_limits<>::max()等等可以在这里提供帮助。
C++ 标准没有指定最大大小int(尽管 16、32 和 64 位 2 的补码很常见),因此,它可能无法表示为double.
在我的代码中,我有一个名称空间,其中包含
template<
typename T/*the desired type*/,
typename/*the source type*/ Y
> T integral_cast(const Y& y)
{
static_assert(false, "undefined integral_cast");
}
Run Code Online (Sandbox Code Playgroud)
我专门用于我需要的每个数字转换。
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |