自动建站源码,开发商城系统,网站建设水上乐园,淮安市建设局网站首页const 修饰指针#xff1a;如果关键字const出现在星号*左边#xff0c;表示被指物是常量#xff0c;如果const出现在*右边表示指针自身是常量#xff0c; 如果出现在两边表示被指物和指针都是常量#xff1b; const std::vectorint::iterator iter vec.begin(); … const 修饰指针如果关键字const出现在星号*左边表示被指物是常量如果const出现在*右边表示指针自身是常量 如果出现在两边表示被指物和指针都是常量 const std::vectorint::iterator iter vec.begin(); //iter的作用就像是T* const iter;错误 std::vectorint::const_iterator cIter vec.begin(); //cIter的作用像个const T* *cIter 10;错误 const 修饰函数返回值将operator*的返回值声明为const类型避免(a*b) c;这种没意思的赋值动作 const 成员函数表示该成员函数可以作用于const对象身上 两个成员函数只是常量性不同可以被重载 bitwise constnessconst成员函数不可以更改对象任何non-static成员变量 class CTextBlock{ public: std::size_t length() const; private: char* pText; sdt::size_t textLength; bool lengthValid; }; std::size_t CTextBlock::length() const { if(!lengthIsValid) { textLength std::strlen(pText); //错误在const成员函数内不能赋值给 lengthIsValid ture; //textLength和lengthValid } } 此时可以用一个与const相关的摆动场mutable可变的释放掉non-static成员变量的bitwise constness约束 class CTextBlock{ public: std::size_t length() const; private: char* pText; mutable sdt::size_t textLength; mutable bool lengthValid; }; std::size_t CTextBlock::length() const { if(!lengthIsValid) { textLength std::strlen(pText); //现在可以改变textLength lengthIsValid ture; //和lengthValid } } 在const成员函数和non-const成员函数中避免重复用non-const调用const兄弟经过两次转换反向做法不应该const成员函数不改变其对象的逻辑状态 class TextBlock{ public: const char operator[](std::size_t position) const { ...... return text[opsition]; } char operator[](std::size_t position) { return const_castchar( //将op[]的返回值的const移除 static_castconst TextBlock(*this)[] //为*this加上const调用op[] ); } }; 转载于:https://www.cnblogs.com/lidan/archive/2012/01/05/2313793.html