但是如果不行的话 我们就要用const_cast,用一个const值调用s函数了! void s(char *) { cout << 'a' << endl; } char a = 's'; const char *ss = &a; s(const_cast<char*> (ss)); 1. 2. 3. 4. 5. 6. 7. ok,我们编译通过了! 不过我在写代码的时候const_cast 用的很少!
const char *cm = &m; char *n = const_cast<char*>(cm); *n = 'a'; cout << *n << endl; 很好,代码编译通过,你应该能看的出来,他的结果不应该是‘t'吧,对的 最后的输出结果是’a',我们给n指针所指向的变量重新变了值了~ 很好,这就是我们的const_cast的功劳! 但是如果是这样: const char...
const_cast的用法如下: 代码语言:cpp 复制 const MyClass obj; MyClass* nonConstObj = const_cast<MyClass*>(&obj); 在这个例子中,我们将一个const的MyClass对象转换为一个非const的对象,以便我们可以调用非const的成员函数。 需要注意的是,使用const_cast可能会导致未定义的行为,因此应该谨慎使用。如果你...
dynamic_cast专门用于处理多态机制,对继承体系内的对象(类中必须含有至少一个虚函数)的指针【引用】进行转换,转换时会进行类型检查;vc在编译时要带上/EHsc /GR 如果能转换会返回对应的指针【引用】;不能转换时,指针会返回空,引用则抛出std::bad_cast异常(const std::bad_cast& e) 注:由于std::bad_cast类型...
const_cast: 主要针对const和volatile的转换. static_cast: 一般的转换,no run-time check.通常,如果你不知道该用哪个,就用这个。 reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。 1)static_cast<T*>(a) 编译器在编译期处理 ...
cout<<"type::i = "<<t.i<<'\n';constintj=3;// 声明 j 为 constint*pj=const_cast<int*>(&j);// *pj = 4; // 未定义行为void(type::*pmf)(int)const=&type::f;// 指向成员函数的指针// const_cast<void(type::*)(int)>(pmf); // 编译错误:const_cast 不在成员函数指针上工作...
constchar* const p ="abc";p[1] ='B'; //compile errorp ="xyz"; //compile error 1. 2. 3. [5] 修饰函数参数:c语言中const修饰参数反映的含义同上所述 小结:C语言中,const的用法差不多就这些,比较简单。 C++扩充了const的用法 [1] 修饰成员变量:const成员变量只能在初始化列表里做初始化,程序...
int hello_address = reinterpret_cast<int> (&hello); 1. 2. 3. 4. 动态类型转换 dynamic_cast :父类 ( 对象 / 指针 / 引用 ) 和 子类 ( 对象 / 指针 / 引用 ) 之间的转换 , 是 C++ 语言特有的 , C 语言中没有该转换类型 ; 常量转换 const_cast :只针对 C++ 常量 , 将 常量转为变量 或...
所以C++ 提供了一组可以在不同场合下执行强制转换的函数,主要分成了四种: const_cast去除const属性,将之前无法修改的变量变为可修改。 static_cast静态类型转换,常用于基本类型转换,例如将int转换成char。 dynamic_cast动态类型转换,多态类之间的类型转换,如子类和父类之间的多态类型转换。
static_cast:可以实现C++中内置基本数据类型之间的相互转换。 如果涉及到类的话,static_cast只能在有相互联系的类型中进行相互转换,不一定包含虚函数。 const_cast<>() cost_cast即用于强制转换指针或者引用的const或volatile限制,特别注意的是,const_cast不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的...