C++ const_cast 和重载 在4.11.3节(第145页)中我们说过,const_cast 在重载函数的情景中最有用。举个例子,回忆6.3.2节(第201页)的shorterstring 函数://比较两个string对象的长度,返回较短的那个引用 const string &shorterString(const string &sl,const string &s2) { return sl.size()<= s2.size()?
const string &shorterString(const string &s1, const string &s2) { return s1.size() <= s2.size() ? s1 : s2; } string &shorterString(string &s1, string &s2) { auto &rs = shorterString(const_cast<const string &>(s1), const_cast<const string &>(s2)); return const_cast<string ...
【共读Primer】54.[6.4]函数重载--const_cast和重载 Page209 const_cast和重载 在下面的第一个函数中我们使用是否const的字符串都可以调用, 但是返回值也都是const string &。 如果我们需要一个返回后可以被修改的值,也就是左值,那么我们就需要用到第二个函数。 第二个函数中有const_cast对字符串进行从非const...
low-level的const语义可以产生不同的形参类型,因此可以产生重载; 类型转换和const_cast 众所周知,C++中的类型转换分为隐式和显式转换。 在类型的隐式转换中,我们可以加上low-level的const,如下所示: intgemfield;constint&r1=gemfield;//正确,隐式转换可以加上low-level的constconstint*p1=&gemfield;//正确,隐...
voidconstFunc()const{const_cast<MyClass*>(this)->nonConstFunc();// 可以调用非const成员函数,但不推荐使用} 非const成员函数内可以调用其它的const成员函数吗 非const成员函数可以调用其他的const成员函数。在非const成员函数内部,可以调用任何类型的成员函数,包括const成员函数。这是因为非const成员函数可以修改对...
const_cast和static_cast被用于实现非const的getValue()函数,这样是不需要额外的代码。3. 函数重载:有...
,更何况!你的参数是string!你要将const转变成non-const时,只有const_cast能做到
Printer(const_cast(&consatant)); return0; } 出现这种情况的原因,可能是我们所调用的方法是别人写的。还有一种我能想到的原因,是出现在const对象想调用自身的非const方法的时候,因为在类定义中,const也可以作为函数重载的一个标示符。有机会,我会专门回顾一下我所知道const的用法,C++的const真的有太多可以说的...
static_cast:用于非多态类型的转换。 dynamic_cast:用于多态类型的转换。 const_cast:用来消除const, volatile, __unaligned属性的转换。 reinterpret_cast:用于空间的重新解释。 还有一个在VS2005中出现的类型转换关键字safe_cast.#2 static_cast: static_cast<type_id>(expression) ...
(conststring&s1,conststring&s2){returns1.size()<=s2.size()?s1:s2;}string&shorter(string&s1,string&s2){//重载调用到上一个函数,它已经写好了比较的逻辑auto&r=shorter(const_cast<conststring&>(s1),const_cast<conststring&>(s2));//auto等号右边为引用,类型会忽略掉引用returnconst_cast<string&...