我写了越来越多的C应用程序,现在我想知道关于强制转换的东西.在C++中,动态强制转换是一种非常昂贵的操作(例如向下转换),但我甚至不知道静态转换.
在C中,我不得不写这样的东西:
assert ( p ); /* p is void* */
int v = *(int*)p;
Run Code Online (Sandbox Code Playgroud)
它是一个"C动态演员"吗?它static_cast<int*>(p)与C++ 完全相同吗?它要多少钱?
提前致谢.
C中的强制转换仅在编译时有意义,因为它告诉编译器如何操作一段数据.它不会更改数据的实际值.例如,(int*)p告诉编译器将p整数视为内存地址.然而,这在运行时没有任何成本,处理器只是处理它们的原始数字.
除了 dynamic_cast组合之外, AC演员更像是所有C++风格演员.因此,当您将int转换为另一个整数类型时,它就是static_cast.当您将指针转换为其他指针类型或整数类型或反之时,它是reinterpret_cast.如果你抛弃了const,那就是const_cast.
C没有类似的东西,dynamic_cast因为它有对象类型的概念,也没有像C++那样用它们(没有虚函数......).关于解释对象位的类型在与C中引用对象的表达式组合时变得很重要.对象本身没有类型.