const typedef之间的区别

时间:2015-01-07 05:48:54

标签: c++ c

之间的确切区别是什么?
typedef class abc* abcp;  
typedef const class abc* constAbcp ; 

const abcp a1 ;  ------- 1 
constAbcp  a2 ;  ------- 2

what is the difference between 1 and 2    

3 个答案:

答案 0 :(得分:2)

a2 is pointer to constant.
a1 is constant pointer.

a2->nonConstFunc(); // Bad
a1 = a2; // Bad

a1->nonConstFunc(); // OK
a2 = new_a2; // OK

示例:

struct abc {
  int foo;
};

typedef abc* abcp;  
typedef const abc* constAbcp ;

abc temp[5];

const abcp a1 = temp;
constAbcp  a2 = temp;

a1->foo = 5; // OK
a2->foo = 5; // Bad(Compile error)

a1++;  // Bad
a2++; // OK

Live example here


密切相关的C问题:what does this 2 const mean?

答案 1 :(得分:0)

const abcp a1 ;   
const Abcp  a2 ; 

a1是指向abcp

类型常量的指针

a2是指向Abcp

类型常量的常量指针

答案 2 :(得分:0)

正如其他回答者所提到的,a1是一个常量指针。这意味着无法更改地址

const abcp a1;

简化为:

abc* const a1;

坦率地说这是废话,因为你现在有一个未初始化且无法更改的指针。所以任何转让都是非法的。例如,你不能这样做: a1 = NULL;

其他回答者也提到,a2是指向常量的指针。意味着无法更改的地址。

constAbcp a2;

简化为:

const abc* a2;

这确实有意义,因为您可以将所有想要的内容分配给a2,只是您只能使用它来读取它引用的值。您不能使用它来写入它引用的值。