1)如果表达式 的类型刚好是目标类型 或目标类型 的更少 cv 限定版本,那么结果是表达式 具有目标类型 类型的值。也就是说,dynamic_cast可以用来添加常量性。隐式转换和static_cast也能进行此转换。 2)如果目标类型 是“到(可有 cv 限定的)Base的指针”、表达式 的类型...
从上面的例子来看,好像指针从A偏向了B。 最后一种情况就是转型失败,指针将返回NULL,reference将抛出异常。至于什么时候会转型失败,主要还是待转型的指针指向的类继承层次最下面的那个对象所包含了subobject了。。 参考 cppreference stackoverflow版权声明:本文为zhangxiao93原创文章,遵循 CC 4.0 BY-SA 版权协议,转载...
参考资料: a):http://en.cppreference.com/w/cpp/language/static_cast b):http://en.cppreference.com/w/cpp/language/dynamic_cast c):http://en.cppreference.com/w/cpp/language/const_cast d):http://en.cppreference.com/w/cpp/language/reinterpret_cast e):《Effective C++》条款27:尽量少做转...
// 标准规定了 右值引用 不能转成 非右值引用,也就是右值引用 只能转换成 右值引用 // http://en.cppreference.com/w/cpp/language/dynamic_cast static_assert(TOr<TIsLValueReferenceType<From>, TIsRValueReferenceType<To>>::Value, "Cannot dynamic_cast from an rvalue to a non-rvalue reference")...
5253//sidecast for pointer54if(A* a = dynamic_cast<A*>(baseB1))55{56a->f();57}58else59{60std::cout <<"Not the right A type!"<<std::endl;61}62std::cout <<"---"<<std::endl;6364//sidecast for reference65try{66A& a = dynamic_cast<A&>(baseB2);67a.f();68}catch(con...
// static_cast_Operator.cpp // compile with: /LD class B {}; class D : public B {}; void f(B* pb, D* pd) { D* pd2 = static_cast<D*>(pb); // Not safe, D can have fields // and methods that are not in B. B* pb2 = static_cast<B*>(pd); // Safe conversion, ...
rtti.cpp: [cpp]view plaincopy #include <stdio.h> #include <typeinfo> #include "rtti.h" #pragma warning(disable:4297) static PVOID __cdecl FindCompleteObject(PVOID *); static _RTTIBaseClassDescriptor * __cdecl FindSITargetTypeInstance(PVOID,_RTTICompleteObject...
1,2) 若非static_cast<T*>((U*)nullptr) 良构则行为未定义。3,4) 若非dynamic_cast<T*>((U*)nullptr) 良构则行为未定义。5,6) 若非const_cast<T*>((U*)nullptr) 良构则行为未定义。7,8) 若非reinterpret_cast<T*>((U*)nullptr) 良构则行为未定义。
但static_cast已经有安全性的考虑了,比如对于不相关类指针之间的转换。参见下面的例子: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 1// class type-casting2#include<iostream>3using namespace std;45classCDummy{6float i,j;7};89classCAddition{10int x,y;11public:12CAddition(int a,int b){...
2. dynamic_cast<>需要类成为多态,即包括“虚”函数,并因此而不能成为void*。 参考: 1. [MSDN] C++ Language Reference -- Casting 2. Nishant Sivakumar, Casting Basics - Use C++ casts in your VC++.NET programs 3. Juan Soulie, C++ Language Tutorial: Type Casting...