`using`和直接插入之间的区别

kaw*_*ken 2 c++ using const

考虑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直接使用和"内联"类型之间是否存在更多差异?

das*_*ght 6

解释上的差异是由于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)

基本上,添加一个usingtypedef使C++ int*作为单一类型处理,只有一种分配常量的方法.另一方面,int*直接写入被视为"派生"指针类型,它由一组不同的规则控制.

  • 这不是问题的答案. (3认同)