请问C/C++强制类型转换中(int)xxx和 int(xxx)有什么区别?
只是同一种强制类型转换的不同写法,功能上 是等价的。 我一般是 C语言用(int)xxx,C++用int(xxx) 或 static_cast(xxx)。 ·(int)xxx是 C风格,属于 C语言标准,兼容 性最强。 int(xxx)是 C++的写法,基于构造函数语法 糖。
最明显的应该是(T)ptr 和T(ptr)的区别。 比如两个完全不相关的类型A和B。 复制代码 struct A { int data; }; struct B { char buf[10];}: int main() A a_obj; A a_ptr =&a_obj; b1=(B)a_ptr; B b2=B(a_ptr);//编译错误 return 0; (B)a_ptr 发出的指令:别管类型对不对 这些二进制位当作B用。能绕过类型系统
只是同一种强制类型转换的不同写法,功能上 是等价的。 我一般是 C语言用(int)xxx,C++用int(xxx) 或 static_cast(xxx)。 ·(int)xxx是 C风格,属于 C语言标准,兼容 性最强。 int(xxx)是 C++的写法,基于构造函数语法 糖。
进入 reinterpret_cast。 B(a_ptr)发出的指令:用现有的a_ptr 来构 造或初始化一个B类型的值。但 B是内置 指针类型,没有单参构造函数处理 A,两者 又不存在继承关系,就不能 static_cast,编 译器只能报错。
这种差异也会体现到基础类型。比如 (int)&my_float 可以把 float 的地址硬转成 int 指针(重解释内存),但int(&my_float)是语 法错误。 这就是为什么现代 C++强调区分四种命名转 换:static_cast,dynamic_cast、const_cas t+、reinterpret_cast*.



请登录后发表评论
注册
停留在世界边缘,与之惜别