C++基本概念总结——const 和 非const
2012-11-19 21:17
246 查看
const成员函数
类的成员函数后边增加一个 const 关键字,表示该函数为 const 成员函数。考虑如下类A的定义,f1为 const 成员函数,f2为 非const 成员函数:
在 const 成员函数中不能修改类的成员变量,如下代码会导致编译失败:
此外,类的 const 对象,只能访问其 const 成员函数,如下代码中只有对 f2 的调用会导致编译失败:
const成员变量
非静态 const 成员变量需要通过初始化列表进行初始化。静态 const 成员变量通过显示的定义进行初始化。
const指针
const指针定义时,根据 const 关键字和 * 的位置,可以分成两种情况。
例如上面的代码中,p1和p2表示的含义相同(const 关键字在 * 的左边),表示指针指向的内容是 const 的,但指针本身是 非const。p3 (const 关键字在 * 的右边)表示指针本身是const的,但其指向的内容是 非const。
类的成员函数后边增加一个 const 关键字,表示该函数为 const 成员函数。考虑如下类A的定义,f1为 const 成员函数,f2为 非const 成员函数:
class A{ public: A(int i) : m_id(i) {} void f1() const; // const 成员函数 void f2(); // 非const 成员函数 private: int m_id; };
在 const 成员函数中不能修改类的成员变量,如下代码会导致编译失败:
void A::f1() const { m_id = 1; // 编译失败!不能修改类的成员变量 }
此外,类的 const 对象,只能访问其 const 成员函数,如下代码中只有对 f2 的调用会导致编译失败:
const A a(1); a.f1(); // 编译成功 a.f2(); // 编译失败,不能访问非 const 成员函数
const成员变量
非静态 const 成员变量需要通过初始化列表进行初始化。静态 const 成员变量通过显示的定义进行初始化。
class A{ public: A(int i) : m_id(i){} // 非静态 const 成员变量通过初始化列表初始化 private: const int m_id; static const int s_id; }; const int A::s_id = 1; // 静态 const 变量通过显示的定义进行初始化
const指针
const指针定义时,根据 const 关键字和 * 的位置,可以分成两种情况。
char buf[4] = "abc"; const char* p1 = buf; char const* p2 = buf; char* const p3 = buf;
例如上面的代码中,p1和p2表示的含义相同(const 关键字在 * 的左边),表示指针指向的内容是 const 的,但指针本身是 非const。p3 (const 关键字在 * 的右边)表示指针本身是const的,但其指向的内容是 非const。
char c = 'd'; p1[0] = c; // 编译失败,其指向的内容是const的,不能修改 p2[0] = c; // 编译失败 p1 = &c; // 编译成功 p2 = &c; // 编译成功 p3[0] = c; // 编译成功 p3 = &c; // 编译失败,指针本身是const的,不能修改
相关文章推荐
- C++基本概念总结(static小结)
- C++一些基本概念总结【面向过程篇】——编译预处理
- C++一些基本概念总结【面向过程篇】——数组
- C++基本概念总结——引用和指针
- C++基本概念总结——公有继承和私有继承
- C++基本概念总结——声明(declaration)和定义(definition)
- C++基本概念总结——虚函数和非虚函数
- C++基本概念总结——重载(overload)和重写(override)
- C++一些基本概念总结【数据表达篇】
- C++基本概念总结——构造函数的public/protected/private语义
- C++一些基本概念总结【面向过程篇】——函数
- C++基本概念总结——静态成员
- C++一些基本概念总结【面向过程篇】——指针
- C++基本概念——const与基本类型和类、const与指针、const与引用
- Net-snmp总结(一)-snmp的基本概念
- C++ const总结
- 关于C++ const 的全面总结
- c/c++中const用法总结
- c++基础:新标准constexpr基本用法及其他注意点
- 【iOS7的一些总结】13、UIScrollView的概念和基本使用方法