c++ - 你怎么知道你是否可以将一个类型 static_cast 为一个不同的类型?

标签 c++

这里引用了维基百科对 static_cast 的描述。

“类型参数必须是可以通过已知方法将对象转换为的数据类型,无论是内置方法还是强制转换。类型可以是引用或枚举器。所有类型的转换都很好-编译器定义和允许的是使用 static_cast 执行的。”

你是怎么想出这个“已知方法”的?

最佳答案

下面是 static_cast 可以执行的转换列表:

  • 派生类指针(resp.reference)的基类指针(resp.reference)
  • 任何隐式转换
  • 调用显式构造函数或显式转换函数的转换
  • 左值到xvalue
  • 作废的任何类型
  • 介于算术和枚举类型之间,或两种不同的枚举类型
  • 从指向派生类成员的指针,到指向基类成员的指针,前提是指向的类型匹配
  • void*T*,其中 T 是一个对象类型

在第二点和第三点的情况下,可能有多种可能的转换顺序。过载解决方案用于选择最佳解决方案。的确,有时可能并不明显哪一个是最好的,哪个是编译器会选择的(这就是为什么不要过分使用重载构造函数和转换函数是个好主意)。如果重载决策不明确,程序将无法编译。

关于c++ - 你怎么知道你是否可以将一个类型 static_cast 为一个不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40254036/

相关文章:

c++ - 一元减号的宏扩展

c++ - 命令行程序的返回值

c++ - 如何在 C++ 中通过名称 (std::string) 调用函数?

c++ - 如何生成范围内的随机数 (-x,x)

c# - Windows Mobile 上的 vector 图形

c++ - 使用 CreateFile 函数创建文件会导致写保护文件

c++宏重载不起作用

C++:在初始化列表中初始化对 ofstream 的引用

c++ - glGetProgramIv() 不会改变发送给它的指针

c++ - 在 MPI 中对 cout 的 "atomic"调用