但是如果不行的话 我们就要用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_cast的用法如下: 代码语言:cpp 复制 constMyClass obj;MyClass*nonConstObj=const_cast<MyClass*>(&obj); 在这个例子中,我们将一个const的MyClass对象转换为一个非const的对象,以便我们可以调用非const的成员函数。 需要注意的是,使用const_cast可能会导致未定义的行为,因此应该谨慎使用。如果你需要调...
const char *cm = &m; char *n = const_cast<char*>(cm); *n = 'a'; cout << *n << endl; 很好,代码编译通过,你应该能看的出来,他的结果不应该是‘t'吧,对的 最后的输出结果是’a',我们给n指针所指向的变量重新变了值了~ 很好,这就是我们的const_cast的功劳! 但是如果是这样: const char...
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) 编译器在编译期处理 ...
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动态类型转换,多态类之间的类型转换,如子类和父类之间的多态类型转换。
constchar* const p ="abc";p[1] ='B'; //compile errorp ="xyz"; //compile error 1. 2. 3. [5] 修饰函数参数:c语言中const修饰参数反映的含义同上所述 小结:C语言中,const的用法差不多就这些,比较简单。 C++扩充了const的用法 [1] 修饰成员变量:const成员变量只能在初始化列表里做初始化,程序...
C++引入了static_cast、dynamic_cast、const_cast和reinterpret_cast这4种类型转换操作符,提供了更安全、...
i << '\n'; const int j = 3; // 声明 j 为 const int* pj = const_cast<int*>(&j); // *pj = 4; // 未定义行为 void (type::* pmf)(int) const = &type::f; // 指向成员函数的指针 // const_cast<void(type::*)(int)>(pmf); // 编译错误:const_cast 不在成员函数指针上...