条款03:尽可能的使用const

    在c++开发中,经常会看到const关键字,比如copy构造函数、copy assignment函数中参数都有const关键字。

    在条款02中也提到过用const来替换#define修饰常量,所以const关键字是用来表示常量,即被修饰的变量初始化之后不可被修改。

const修饰变量

    const修饰带指针变量的时候经常会弄混淆,所以需要仔细分辨,一般分为三种情况:

例如:

    char greeting[] = "Hello";

    char* p = greeting;

    const char* p = greeting;    // 表示指针为p的char类型常量,p指针可以指向其它对象,而(*p)不能被修改

    char* const p = greeting;  // 表示p为char类型的const指针,p不能被修改,但是(*p)可以被修改

    const char* const p = greeting;   // 表示p为const char类型的const指针,p和(*p)都无法修改。

  const出现在星号(*)左边,表示被指物是常量;

  const出现在星号(*)右边,表示指针是常量;

  const出现在星号两边,表示被指物都是常量。

const成员函数

    const修饰成员函数的目的,是为了确认该成员函数可作用于const对象身上。这一类成员函数之所以重要,基于两个理由。

    第一,它们使class接口比较容易被理解。这是因为,可以确认哪个函数可以修改对象内容。

    第二,它们使“操作const对象”成为可能。这对编写高效代码是关键,因为条款20所言,改善C++程序效率的一个根本办法是以pass by reference-to-const方式传递对象,而此技术可行的前提是,我们有const成员函数可用来处理取得的const对象。

另外注意两个成员函数如果只是常量性不同也是可以重载的,即我们会看到两个函数除了一个有const一个没const之外,其它都一样。

请记住

  • 将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。
  • 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”。
  • 当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。

        在C++开发中,通常我们设计类的时候,应该充分考虑哪些数据成员不可被修改,哪些函数不应该修改类中的数据。善于使用const能让代码更清晰,同时也能避免一些错误。比如最简单的get和set方法设计就体现了这个思想。

发布了88 篇原创文章 · 获赞 17 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/yj_android_develop/article/details/94168431