const关键字

const关键字

const 修饰成员变量

修饰变量

具有常属性,可以在定义数组的时候用该变量定义,每次取值从寄存器中取,在编译过后,直接将对应的值,替换到当前变量的位置。与之相对的是volatile。被这个关键字修饰的话,代表告诉了编译器,这个变量时随时可能被修改的。防止编译器优化,每次读取该值时,从内存中读取。而不是从编译器优化的寄存器中读取。C++中,被const修饰的变量,会在编译期间将对应的变量,直接替换为该变量的值。但是C语言中不会。

const离谁近,谁就不能被修改;         
const修饰一个变量时,一定要给这个变量初始化,若不初始化,在后面也不能初始化。

修饰指针

 #include<iostream>
 using namespace std;
int main(){
     int a1=3;   ///non-const data      
     const int a2=a1;    ///const data 
     int * a3 = &a1;   ///non-const data,non-const pointer  
     const int * a4 = &a1;   ///const data,non-const pointer    
     int * const a5 = &a1;   ///non-const data,const pointer  
     int const * const a6 = &a1;   ///const data,const pointer    
     const int * const a7 = &a1;   ///const data,const pointer 
     return 0;
 }

const修饰指针变量时:  
(1)只有一个const,如果const位于*左侧,表示指针所指数据是常量,不能通过解引用修改该数据;指针本身是变量,可以指向其他的内存单元。  
(2)只有一个const,如果const位于*右侧,表示指针本身是常量,不能指向其他内存地址;指针所指的数据可以通过解引用修改。  
(3)两个const,*左右各一个,表示指针和指针所指数据都不能修改。

const修饰成员函数

修饰函数返回值

const int add(int a, int b)放在返回值前无意义,因为返回的值本就是一个临时变量。所以const修饰也没有任何作用

修饰参数列表

放在参数列表前修饰。用来保护传进来的参数,保证尽可能的不被修改。

放在函数后

放在函数后面。用来修饰类的成员函数中的this所指向的,也就是保护类成员(非静态成员除外)不被修改。
同时,没有const修饰的函数可以调用const修饰的成员函数,但是被const修饰的成员函数不可以调用非const修饰的成员函数。而且非const定义出来的对象可以调用const与非const函数,但是const定义出来的对象只能调用const修饰的函数,不能调用非const函数,因为他有可能对对象进行修改。
类成员函数中,后面加与不加const也可以形成重载。const修饰的对象调用的是const修饰函数,非const修饰的对象调用的是非const函数。

c++ 函数前面和后面 使用const 的作用:
前面使用const 表示返回值为const
后面加 const表示函数不可以修改class的non-static成员

Tips

对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。例如将voidFunc(A a) 改为voidFunc(const A &a)。
对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如voidFunc(int x) 不应该改为voidFunc(const int &x)。
任何不会修改数据成员的函数都应该声明为const类型

如何在内存0x0018ff44地址处写一个四字节整数20,用指针和引用变量实现?

#include<iostream>
using namespace std;
int main()
{
    //指针变量
    int *p = (int *)0x0018ff44;
    *p = 20;

    //引用变量
    int* const &q = (int *)0x0018ff44;
    *p = 10;
    //其中间生成了临时量,我们可以用如下伪代码来说明:
    //int *const ptemp = (int *)0x0018ff44;
    //int *const &q = ptemp; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值