这里,const
指针保存const
变量的地址。喜欢:
#include <iostream>
int main()
{
const int i = 5;
const int* ptr = &i;
}
它工作正常。
但是,如果我使用using (Type alias)之类的:
#include <iostream>
using intptr = int*;
int main() {
const int i = 5;
const intptr ptr = &i;
}
GCC编译器出错。 [Live demo]
为什么指针不适用于using
类型别名?
答案 0 :(得分:6)
const intptr ptr
相当于int * const ptr
- const指向非const int的指针,而不是const int * ptr
- 指向const int的非const指针。
如果您发现指针声明的这种从右到左的阅读顺序令人困惑,您可以利用提供别名模板的Straight declarations库来从左到右阅读顺序声明指针类型:
const ptr<int> p; // const pointer to non-const int
ptr<const int> p; // non-const pointer to const int
答案 1 :(得分:2)
请注意,对于const intptr
,const
是intptr
上的顶级限定符。因此,const
符合指针本身,然后const intptr
表示int* const
(即指向非const
const
的{{1}}指针,而非int
{1}}(即指向const int*
const
的非const
指针。
答案 2 :(得分:1)
const
关键字实际上是绑定到左侧的单词。值得注意的例外是它可以绑定的唯一单词是在右侧。
这意味着const int* ptr
可以被重写为int const* ptr
const intptr ptr
相当于intptr const ptr
int *const ptr
。