c++ - 在 C++ 中,static_cast<double>(a) 和 double(a) 有什么区别?

标签 c++ casting

两者有什么区别

int a;
// a gets some value
double pi = static_cast<double>(a)/3;

int a;
// a gets some value
double pi = double(a)/3;

你见过后者吗?在我看来,我在 Stroustrup 编写的一些片段中看到了它,但我找不到引用。

最佳答案

可能有人认为他们是在构建而不是在类型转换。考虑:

some_fun(std::string("Hello"));

许多人认为他们在那里调用了构造函数,而实际上他们正在执行 C 风格的转换。碰巧的是,强制转换会在它查看的一长串其他东西中查看目标类型的构造函数,所以在这里它最终会调用构造函数。

函数符号转换与其他类型的 C 转换具有所有相同的弱点:

  • 可以在不经意间抛弃 constness
  • 可以默默地变成重新诠释的 Actor
  • 很难用 grepping 工具区分。

除此之外,您在两种情况下执行的操作完全相同。

关于c++ - 在 C++ 中,static_cast<double>(a) 和 double(a) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438249/

相关文章:

java - LinkedHashMap 类型转换

string - 将字节 slice 转换为字符串时,Golang 会进行任何转换吗?

c++ - 当 Visual Studio 2017 与 std header 不兼容时,如何使用最高警告级别(墙)?

c++ - 智能指针可能的内存泄漏

c++ - 将对象转换为 char,然后转换为 "uncasting it back"

c++ - 从 unsigned char* 到 const wchar_t* 的转换

string - 如何使用传递的字符串进行转换?

C++ 从多个线程访问 vector

c++ - 加载 TTF 时出现段错误 - SDL2

c++ - 无法在声明时使用初始化列表初始化 const char*/string 数组的 vector