这里引用了维基百科对 static_cast 的描述。
“类型参数必须是可以通过已知方法将对象转换为的数据类型,无论是内置方法还是强制转换。类型可以是引用或枚举器。所有类型的转换都很好-编译器定义和允许的是使用 static_cast 执行的。”
你是怎么想出这个“已知方法”的?
最佳答案
下面是 static_cast
可以执行的转换列表:
- 派生类指针(resp.reference)的基类指针(resp.reference)
- 任何隐式转换
- 调用显式构造函数或显式转换函数的转换
- 左值到xvalue
- 要
作废
的任何类型 - 介于算术和枚举类型之间,或两种不同的枚举类型
- 从指向派生类成员的指针,到指向基类成员的指针,前提是指向的类型匹配
void*
到T*
,其中T
是一个对象类型
在第二点和第三点的情况下,可能有多种可能的转换顺序。过载解决方案用于选择最佳解决方案。的确,有时可能并不明显哪一个是最好的,哪个是编译器会选择的(这就是为什么不要过分使用重载构造函数和转换函数是个好主意)。如果重载决策不明确,程序将无法编译。
关于c++ - 你怎么知道你是否可以将一个类型 static_cast 为一个不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40254036/