const关键字

Posted cintang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了const关键字相关的知识,希望对你有一定的参考价值。

1.const修饰普通变量

const int a = 10;

a被视为常量

2.const修饰指针

int a = 10;

int const * b = &a; 此时b为常量指针,因为const修饰的是* b,所以指针的指向的内容不能变,指向可变,

int * const c = &a;此时c指针常量,c的指向不可以变,但可以通过c来改变指向的内容

3.const引用

const引用是可以绑定到const对象或者非const对象上,但是不可以通过const引用来修改原对象的值

非const引用只能绑定到非const对象上,不能绑定到const对象上

所以总结完就是非const引用不能绑定到const对象上

4.const成员变量

const成员变量只能在类内进行声明,定义,在构造函数初始化列表中进行初始化

5.const成员函数

不能修改成员变量的值,只能访问成员变量,不能够调用非const成员函数

const对象只能调用const成员函数,const成员函数对this指针加const限制

非const对象可以调用双版本成员函数,优先调用const版本

void print() const //const point* const this

void print() //point* const this

 

const关键字与指针

const关键字与指针

const修饰指针的4种形式
(1) const.关键字,在C语言中用来修饰变量,表示这个变量是常量。
(2) const修饰指针有4种形式,区分清楚这4种即可全部理解const和指针。
第一种:const  int  *p;
第二种:int  const  *p;
第三种:int*  const  p;
第四种:const  int*  const  p;
(3)关于指针变量的理解,主要涉及到2个变量:第一个是指针变量p本身,第二个是p指向的那个变量(*p)。一个const关键字只能修饰一个变量,所以弄清楚这4个表达式的关键就是搞清楚const放在某个位置是修饰谁的。
#include <stdio.h>


void main()
{
    const int *p;             //p本身不是const,而p指向的变量是const
    
    int const *p;             //p本身不是const,而p指向的变量是const
    
    int* const p;             //p本身是const,而p指向的变量不是const
    
    const int* const p;       //p本身是const,而p指向的变量也是const
    
}

 

const修饰的变量真的不能改吗?

(1)代码练习说明:const修饰的变量其实是可以改的(前提是gcc环境下)。

#include <stdio.h>


void main()
{
    const int a = 5;
    int* p;
    
    p = (int *)&a;   //这里的报警可以用强制类型转换来消除

    *p = 6; 
    printf("a = %d
",a); 

}

(2)在某些单片机环境下,const修饰的变量是不可以改的。const修饰的变量到底能不能真的被修改,取决于具体的环境,C语言本身并没有完全严格一致的要求。

(3)在gcc中,const是通过编译器在编译的时候执行检查来确保实现的(也就是说const类型的变量不能改是编译错误,不是运行时错误。)所以我们只要想办法骗过编译器,就可以修改const定义的常量,而运行时不会报错。

(4)更深入一层的原因,是因为gcc把const类型的常量也放在了data段,其实和普通的全局变量放在data段是一样实现的,只是通过编译器认定这个变量是const的,运行时并没有标记const标志,所以只要骗过编译器就可以修改了。

const究竟应该怎么用

(1)const是在编译器中实现的,编译时检查,并非不能骗过。所以在c语言中使用const,就好象是一种道德约束而非法律约束,所以大家使用const时更多是传递一种信息,就是告诉编译器、也告诉读程序的人,这个变量是不应该也不必被修改的。

 

 

 

 






以上是关于const关键字的主要内容,如果未能解决你的问题,请参考以下文章

const关键字与指针

const关键字与指针

C++关键字const

const关键字

C++const关键字详解 && volatile关键字了解

C++ 类中的const关键字