<七>3 关于const 总结

一句话
const:首选作用于左边,如果左边没东西 ,就作用于右边
const int : const 作用于右边int
int const : const 作用于左边int

const int * const 左边第一个const ,作用于int , 右边const 作用于 * 指针

int * const : const 作用于指针上面,指指针不可变

const int * : const 作用于int ,指指针指向的内容不可改变

顶层const 和底层 const

顶层:对象本身是 const , int * const , 该对象是int *, const 也是作用于指针, 所以是顶层const

而 const int * ; int * 是个指针, const 作用于int ,是指 指向的内容 const ,那么这个是 底层const

区分顶层const 和底层const 有什么作用?
函数传参的时候 顶层的 const 会被忽略
void foo(const int x)
{

}
void foo(int x)
{}

编译报错,因为 const int x , 对象本身是个 int , 而 const 也是作用在int 上,所以对象本身是 const ,那么
传参的时候会被忽略,所以编译报错了(函数签名是一样的)


void foo(const int * x){

}
void foo(int * x){

}
编译成功, const int * x ,对象是 int *, 对象本身是个指针, 而const int * , const 作用在int 上,是指指针指向的内容const, 所以是个底层const
底层const 不会被忽略,所以两个函数签名就不一样


点击查看代码
void foo(int * const x){

}
void foo(int * x){

}
编译报错, int* const x ,对象是 int*, 对象本身是个指针, 而int* const , const作用在*上,是指,指针本身是const ,即该对象本身是const,所以是顶层const, 
顶层const会被忽略,所以两个函数签名就一样


posted @ 2023-03-21 14:50  Hello_Bugs  阅读(3)  评论(0编辑  收藏  举报