600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > effective C++ 条款 3:尽可能使用const

effective C++ 条款 3:尽可能使用const

时间:2020-09-23 17:48:46

相关推荐

effective C++ 条款 3:尽可能使用const

const 修饰指针:如果关键字const出现在星号*左边,表示被指物是常量,如果const出现在*右边表示指针自身是常量, 如果出现在两边表示被指物和指针都是常量;

const std::vector<int>::iterator iter = vec.begin(); //iter的作用就像是T* const; ++iter;错误

std::vector<int>::const_iterator cIter = vec.begin(); //cIter的作用像个const T*; *cIter = 10;错误

const 修饰函数返回值:将operator*的返回值声明为const类型避免(a*b) = c;这种没意思的赋值动作

const 成员函数:表示该成员函数可以作用于const对象身上

两个成员函数只是常量性不同,可以被重载

bitwise constness:const成员函数不可以更改对象任何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_cast<char&>(//将op[]的返回值的const移除

static_cast<const TextBlock&>(*this)[]//为*this加上const调用op[]

);

}

};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。