学习C++ Primer时在Reference和Pointer上花了很大功夫,尤其是关于 Top-level Const 和 Low-level Pointer 的概念容易搞不清,下面列举了一些区别:
Top-level Const | Low-level Const |
---|---|
自己是 const, 比如 point to 或 bind to 的对象不能变 | point to 或 bind to 的是const |
e.g. int *const a = &b; | e.g. const int *a = &b; |
对Pointer:不允许*p = a; | 对Pointer:不允许p = &a; |
拷贝不受限制 | 拷贝对象必须具有相同的Low-level Const 资格 |
Tip:constexpr
也属于top-level const
!
在C++ Primer(English Version Page64)有:
In general, we can convert a nonconst to (low-level) const but not the other way round.
也就是在Low-level Const 的拷贝中:
Plain(nonconst)→Low-level Const : ok
Low-level Const→Plain(nonconst) : error
对于拷贝赋值中,要着重理解,不然我搞了半天差点疯掉。明白const的针对和必要性,因为纷繁复杂的规则背后必有原理。
例如,在Exercise 2.33中就要明白原理再看d,e,g的情况(虽然主要在研究auto)。
#include <iostream>
using namespace std;
int main()
{