class CTextBlock { public: ... char& operator[](std::size_t position) const // inappropriate (but bitwise { return pText[position]; } // const) declaration of // operator[] private: char *pText;};
const CTextBlock cctb("Hello"); // declare constant object char *pc = &cctb[0]; // call the const operator[] to get a // pointer to cctb's data *pc = 'J'; // cctb now has the value "Jello"
class CTextBlock { public: ... std::size_t length() const; private: char *pText; std::size_t textLength; // last calculated length of textblock bool lengthIsValid; // whether length is currently valid }; std::size_t CTextBlock::length() const { if (!lengthIsValid) { textLength = std::strlen(pText); // error! can't assign to textLength lengthIsValid = true; // and lengthIsValid in a const } // member function return textLength; }class CTextBlock { public: ... std::size_t length() const; private: char *pText; mutable std::size_t textLength; // these data members may mutable bool lengthIsValid; // always be modified, even in }; // const member functions std::size_t CTextBlock::length() const { if (!lengthIsValid) { textLength = std::strlen(pText); // now fine lengthIsValid = true; // also fine } return textLength; }
bitwise const
最新推荐文章于 2023-07-04 11:22:17 发布