C++ primer 中文第五版 62 页:
int i = 0;
const int ci = i;
auto e = &ci;
e 是一个指向整型常量的指针(对常量对象取地址是一种底层 const)
以上可以理解。
下面又说:
要在一条语句中定义多个变量,切记,符号&和*只从属于某个声明符,而非基本数据类型的一部分,因此初始值必须是同一种类型:
auto &m = ci, *p = &ci; // m 是对整型常量的引用, p 是指向整型常量的指针
既然说初始值必须是同一种类型,可是 ci 和&ci 明明不是同一种类型啊!
为什么合法?为什么 p 是指向整型常量的指针,而不是指向整型常量指针的指针?为什么 auto 被推演为 const int 所以表达式合法?为什么 auto 不是被推演为 const int* 然后表达式就不合法了呢?
是不是定义多个变量有什么机制??
如果单独定义 auto *p2 = &ci; 那么 p2 是不是就变为指向整型常量指针的指针了呢?是不是这里的 auto 就被推演为 const int*了呢?
为什么会有这种差异?
手机码字,格式什么的可能不太好,抱歉。
int i = 0;
const int ci = i;
auto e = &ci;
e 是一个指向整型常量的指针(对常量对象取地址是一种底层 const)
以上可以理解。
下面又说:
要在一条语句中定义多个变量,切记,符号&和*只从属于某个声明符,而非基本数据类型的一部分,因此初始值必须是同一种类型:
auto &m = ci, *p = &ci; // m 是对整型常量的引用, p 是指向整型常量的指针
既然说初始值必须是同一种类型,可是 ci 和&ci 明明不是同一种类型啊!
为什么合法?为什么 p 是指向整型常量的指针,而不是指向整型常量指针的指针?为什么 auto 被推演为 const int 所以表达式合法?为什么 auto 不是被推演为 const int* 然后表达式就不合法了呢?
是不是定义多个变量有什么机制??
如果单独定义 auto *p2 = &ci; 那么 p2 是不是就变为指向整型常量指针的指针了呢?是不是这里的 auto 就被推演为 const int*了呢?
为什么会有这种差异?
手机码字,格式什么的可能不太好,抱歉。