C演员到底做了什么?

pha*_*zon 10 c types casting

我写了越来越多的C应用程序,现在我想知道关于强制转换的东西.在C++中,动态强制转换是一种非常昂贵的操作(例如向下转换),但我甚至不知道静态转换.

在C中,我不得不写这样的东西:

assert ( p ); /* p is void* */
int v = *(int*)p;
Run Code Online (Sandbox Code Playgroud)

它是一个"C动态演员"吗?它static_cast<int*>(p)与C++ 完全相同吗?它要多少钱?

提前致谢.

sim*_*onc 8

指针的AC转换更像是C++ reinterpret_cast.它指示编译器将变量视为不同类型,并且在运行时不会花费任何成本.


dev*_*obf 8

C中的强制转换仅在编译时有意义,因为它告诉编译器如何操作一段数据.它不会更改数据的实际值.例如,(int*)p告诉编译器将p整数视为内存地址.然而,这在运行时没有任何成本,处理器只是处理它们的原始数字.

  • 这对所有演员都不正确.`(float)0.3`改变了IEEE754系统的值.它不再等于"0.3". (9认同)

Joh*_*itb 6

除了 dynamic_cast组合之外, AC演员更像是所有C++风格演员.因此,当您将int转换为另一个整数类型时,它就是static_cast.当您将指针转换为其他指针类型或整数类型或反之时,它是reinterpret_cast.如果你抛弃了const,那就是const_cast.

C没有类似的东西,dynamic_cast因为它有对象类型的概念,也没有像C++那样用它们(没有虚函数......).关于解释对象位的类型在与C中引用对象的表达式组合时变得很重要.对象本身没有类型.