使用类型别名不适用于 "const" 指针
using type alias doesn't work with "const" pointer
这里,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
类型别名?
const intptr ptr
等同于 int * const ptr
- 指向非常量 int 的 const 指针,而不是 const int * ptr
- 指向 const int 的非常量指针。
如果您发现指针声明的这种从右到左的阅读顺序令人困惑,您可以使用 Straight declarations 库,它提供别名模板来声明具有从左到右阅读顺序的指针类型:
const ptr<int> p; // const pointer to non-const int
ptr<const int> p; // non-const pointer to const int
请注意,对于 const intptr
,const
是 intptr
上的顶级限定符。所以 const
在指针本身上是合格的,那么 const intptr
意味着 int* const
(即 const
指向非 const
int
的指针),而不是 const int*
(即非 const
指向 const
int
的指针)。
const
关键字实际上绑定到它左边的单词。值得注意的例外是它可以绑定的唯一单词位于右侧。
这意味着 const int* ptr
可以重写为 int const* ptr
而
const intptr ptr
等同于 intptr const ptr
即 int *const ptr
.
这里,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
类型别名?
const intptr ptr
等同于 int * const ptr
- 指向非常量 int 的 const 指针,而不是 const int * ptr
- 指向 const int 的非常量指针。
如果您发现指针声明的这种从右到左的阅读顺序令人困惑,您可以使用 Straight declarations 库,它提供别名模板来声明具有从左到右阅读顺序的指针类型:
const ptr<int> p; // const pointer to non-const int
ptr<const int> p; // non-const pointer to const int
请注意,对于 const intptr
,const
是 intptr
上的顶级限定符。所以 const
在指针本身上是合格的,那么 const intptr
意味着 int* const
(即 const
指向非 const
int
的指针),而不是 const int*
(即非 const
指向 const
int
的指针)。
const
关键字实际上绑定到它左边的单词。值得注意的例外是它可以绑定的唯一单词位于右侧。
这意味着 const int* ptr
可以重写为 int const* ptr
而
const intptr ptr
等同于 intptr const ptr
即 int *const ptr
.