这是来自static_cast的维基百科描述的引用。
“type参数必须是可以通过已知方法转换对象的数据类型,无论是内置还是强制转换。类型可以是引用或枚举。所有类型的转换都很好 - 编译器定义和允许使用static_cast执行。“
你如何找出这种“已知方法”?
答案 0 :(得分:3)
以下是static_cast
可以执行的转化列表:
void
void*
至T*
,其中T
是对象类型在第二和第三个项目符号点的情况下,可能存在多个可能的转换序列。过载分辨率用于选择最佳分辨率。确实,有时可能并不明显哪一个是最好的,编译器将选择的那个(这就是为什么不过度使用重载构造函数和转换函数的好主意)。如果重载决策不明确,程序将无法编译。
答案 1 :(得分:0)
实际上,应该使用static_cast而不是隐式类型转换。
e.g。你宣布一个函数 -
void fun(int a)
{
std::cout << a;
}
所以,fun接受一个int。但是,如果你称之为 -
float b = 1.2;
fun(b);
现在,有趣(b)是有效的&amp;它会编译和将打印1.这里,实际上是float的b已被隐式转换为int。在大型程序中,这可能会导致一些难以找到的错误。因此,为了使这种转换明确,我们使用static_cast作为 -
fun(static_cast<int>(b));
现在,何时使用static_cast完全取决于程序员的理解。因为,编译器不对static_cast执行任何运行时检查。因此,程序员需要验证static_cast转换的结果是否安全。