考虑2个片段:
using x = int*;
int main () {
const x a = new int(3);
*a = 5;
}
Run Code Online (Sandbox Code Playgroud)
和
int main () {
const int* a = new int(3);
*a = 5;
}
Run Code Online (Sandbox Code Playgroud)
第一个编译,而第二个没编译
- > using不等于简单地"插入"类型然后解析该行.
using直接使用和"内联"类型之间是否存在更多差异?
解释上的差异是由于C++声明处理指针常量的方式,它从C语言中借用它的语义.基本上,const int* x并且int * const x意味着不同的东西,如本问答中所解释的.
反过来,这种解释是由于"匿名"指针类型在语法上的派生方式:语言设计者决定const在声明的前面将const-ness指定给指向的值,而不是指针本身.
请注意,当您typedef指针类型时会发生同样的事情:
typedef int* x;
int main () {
const x a = new int(3);
*a = 5; // Works fine
return 0;
}
Run Code Online (Sandbox Code Playgroud)
基本上,添加一个using或typedef使C++ int*作为单一类型处理,只有一种分配常量的方法.另一方面,int*直接写入被视为"派生"指针类型,它由一组不同的规则控制.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |