gpt4 book ai didi

c++ - 为什么我应该在 C++ 中使用 'static_cast' 进行数字转换?

转载 作者:太空狗 更新时间:2023-10-29 21:32:58 25 4
gpt4 key购买 nike

有时,我们需要将一种数字类型显式转换为另一种(例如,避免在我们失去精度或范围时发出警告)。对于某些人:

double foo;

我们可以这样写:

(float)foo

但大多数 C++ 程序员说这是邪恶的“旧式转换”,您应该使用“新式转换”:

static_cast<float>(foo)

还有一个选择 boost::numeric_cast这很有趣(至少在非性能关键代码中)但这个问题是关于 static_cast .

A similar question已经被问到,但是那里使用的最重要的参数对数字转换无效(在我看来,我错了吗?)。它们是:

你必须明确地告诉编译器你想做什么。是向上,还是向下?也许重新诠释 cast?

没有。这是简单的数字转换。没有歧义。如果我知道如何static_cast<float>有效,我知道它如何适用于“旧式”类型转换。

当你写 (T)foo你不知道什么T是!

我不是在写 (T)foo但是(float)foo .我知道什么是 float .

对数字类型使用新的、更好的转换有什么重要的原因吗?

最佳答案

在一般情况下(您已经提到)您需要显式 C++ 转换以避免 When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used? 中提到的可能问题(能够转变成 reinterpret_cast )。

在数字场景中你至少有两个好处:

  • 你不需要记住 C 风格的数字转换安全地转换为 static_cast永远不会到达reinterpret_cast - 我将其称为“易用性”和“毫无意外”的部分
  • 您可以在文本中搜索转换操作(grep 'static_cast<double>'grep '(double)' 可以作为函数签名的一部分)

关于c++ - 为什么我应该在 C++ 中使用 'static_cast' 进行数字转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53317413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com