例如将一个非 const 的对象转换为 const 对象,或将int 转换为double等等。它也可以用来执行上述多种转换的反向转换,例如将void*指针转为typed指针,将pointer-to-base转为pointer-to-derived。但是他无法将const转为non-const,这个只有const-cast才能够办到。 dynamic_cast具有类型检查的功能,比static_cast更安全。
int 转型为 double,等等),它还可以用于很多这样的转换的反向转换(例如,void* 指针转型为有类型指针,基类指针转型为派生类指针),但是它不能将一个 const 对象转型为 non-const 对象(只有 const_cast 能做到),它最接近于C-style的转换。
例如将一个非 const 的对象转换为 const 对象,或将int 转换为double等等。它也可以用来执行上述多种转换的反向转换,例如将void*指针转为typed指针,将pointer-to-base转为pointer-to-derived。但是他无法将const转为non-const,这个只有const-cast才能够办到。 dynamic_cast具有类型检查的功能,比static_cast更安全。
const_cast<T>(expr) 用来移除对象的常量性(cast away the constness) const_cast一般用于指针或者引用 使用const_cast去除const限定的目的不是为了修改它的内容 使用const_cast去除const限定,通常是为了函数能够接受这个实际参数 static_cast<T>(expr)编译器隐式执行的任何类型转换都可以由static_cast完成 当一个较...
const_cast的用法如下: 代码语言:cpp 复制 constMyClass obj;MyClass*nonConstObj=const_cast<MyClass*>(&obj); 在这个例子中,我们将一个const的MyClass对象转换为一个非const的对象,以便我们可以调用非const的成员函数。 需要注意的是,使用const_cast可能会导致未定义的行为,因此应该谨慎使用。如果你需要调...
·static_cast可以被用于强制隐型转换(例如,non-const对象转型为const对象,int转型为double,等等),它还可以用于很多这样的转换的反向转换(例如,void*指针转型为有类型指针,基类指针转型为派生类指针),但是它不能将一个const对象转型为non-const对象(只有const_cast能做到),它最接近于C-style的转换。
因为这是未定义行为,具体你可以参考 ISO/IEC 14882 里的[dcl.type.cv]/4,该条款甚至给出了类似的...
class MyClass {public:void foo() { std::cout << "Non-const foo()" << std::endl; }void foo() const { std::cout << "Const foo()" << std::endl; }};void callNonConstFoo(const MyClass& obj){const_cast<MyClass&>(obj).foo();}int main(){MyClass obj;callNonConstFoo(obj)...
也就是说,应该从non-const重载调用const成员函数,而不是反过来。这样,你就可以确保即使是非const版本...
也就是说,应该从non-const重载调用const成员函数,而不是反过来。这样,你就可以确保即使是非const版本也不会改变对象的状态,而且两个函数中的代码确实 * 相同 *(因为你最终调用的是const版本)-而且 * 肯定会有代码重复 *,这是你想要避免的。如果你反过来做,编译器不会告诉你,如果你修改的对象在非const...