在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_ca...
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_ca...
使用static_cast<>进行类型转换,可以使代码更加清晰,更容易理解。 强制类型转换:static_cast<>可以用于基本类型的强制转换,以及非多态类型的指针或引用之间的转换。它可以将一种类型转换为另一种类型,例如将int转为float,char转为int等。 指针转换:static_cast<>还可以将指向基类的指针转换为指向子类的指针。但是,它...
i=static_cast<int>(f); 1. 2. 3. 2、C++中的reinterpret_cast主要是将数据从一种类型的转换为另一种类型。将数据的二进制存在形式的重新解释。比如:此时结果,i的值为166。 inti; char*p="This is an example."; i=reinterpret_cast<int>(p); 1. 2. 3. 此时结果,i与p的值是完全相同的。reinterp...
静态类型转换关键字,是 C++ 编译器的新特性,C 编译器不支持这个关键字的;主要用于将表达式转换成另一个数据类型,这个转换会经过编译器的合法性检查;
static_cast运算符还可用于执行任何隐式转换,包括标准转换和用户定义的转换。 例如: C++ // static_cast_Operator_3.cpp// compile with: /LD /GRtypedefunsignedcharBYTE;voidf(){charch;inti =65;floatf =2.5;doubledbl; ch =static_cast<char>(i);// int to chardbl =static_cast<double>(f);//...
即使从 Derived* 到Base* 的转换可以安全地使用 static_cast 完成(因为存在继承关系),依然可以使用 reinterpret_cast 来强制执行,但是不推荐这么做。 C:不相关类型的指针之间的转换 int* iptr = new int(42); // 转换 int* 到 char*,可能为了操作内存块的单个字节 char* cptr = reinterpret_cast<char*>(...
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的; 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; ...
short是2个字节,int是4个字节,将short转换成int之后,高位根据符号位补满。 so,小结一下static_cast: 基本数据类型之间的转换,如把int转换成char,把int转换成enum 用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; ...
int a = static_cast<void>(v2.size()); //error,void value not ignored as it ought to be 6.上行转换,同时将数组转换为指针 struct B { int m = 42; const char *hello() const { return "Hello world, this is B!\n"; } };