修饰普通变量,表示不可修改(在定义的时候必须初始化)

#include <iostream>
using namespace std;
const int a1 = 10;
int main()
{const int a3; // 错误,没有初始化const int a2 = 10;a1 = 10;    // 错误,不可修改变量的值int b1 = a1; // 可以给其余变量赋值
}

修饰指针

const修饰指针时分3种情况:常量指针、指针常量、常指针常量。

常量指针

#include <iostream>
using namespace std;
int main()
{int a = 10;// 常量指针,指针指向对象的值不能变,指针指向的对象可以变const int* ptr = &a;*ptr = 100;  //错误int b = 100;ptr = &b; // 正确
}

指针常量

#include <iostream>
using namespace std;
int main()
{int a = 10;// 指针常量,指针指向的对象不可以变,指向对象的值可以变int* const ptr = &a;*ptr = 100; // 正确int b = 100;ptr = &b; // 错误
}

常指针常量

#include <iostream>
using namespace std;
int main()
{int a = 10;// 常指针常量,指针指向的对象、指向对象的值都不能变const int* const ptr = &a;*ptr = 100; // 正确int b = 100;ptr = &b; // 错误
}

const用于函数中

修饰函数的形参

表示函数中不能改变该形参的值。

#include <iostream>
using namespace std;
void function(const int a)
{cout<<a<<endl;a++;// 错误,a用const修饰,大小不能改变
}
int main()
{int a = 10;function(a);
}

修饰函数中的指针形参

防止意外修改指针指向对象的值。

#include <iostream>
using namespace std;
void function(const int* a,int* const b)
{int temp = 100;*a = 10;    // 错误a = &temp;  // 正确b = &temp;  // 错误*b = 20;    // 正确
}
int main()
{int a = 10;int b = 10;function(&a,&b);
}

修饰函数返回值

当函数返回值为int&类型时,可以作为左值
当函数返回值为const int&类型时,不可以作为左值

#include <iostream>
using namespace std;int& test01(int& a)
{return a;
}const int& test02(int& a)
{return a;
}
int main()
{// 函数返回值为int&类型时,可以作为左值进行赋值int a = 10;test01(a) = 100;cout << a << endl;// 函数返回值为const int&类型时,不可以作为左值进行赋值int b = 10;test02(b) = 100;}

const用于类中

修饰成员函数(常函数)

const修饰成员函数时,表示成员函数中成员变量不能修改。

#include <iostream>
using namespace std;
class test
{public:test(int value):m_value(value){}test(){}~test(){}void print_value() const{//this->m_value = 100; // 错误,const修饰成员函数中,不能修改成员变量的值cout<<this->m_value<<endl;}const int get_value(){return this->m_value;}
private:int m_value;
};int main()
{test Test(20);int value = Test.get_value();cout<<value<<endl;
}

如果想让const成员变量可以在成员函数中修改的话,可以加一个关键字mutable。

#include <iostream>
using namespace std;
class test
{public:test(int value):m_value(value){}test(){}~test(){}void print_value() const{this->m_value = 100; // 此时可以,因为成员变量被mutable修饰cout<<this->m_value<<endl;}const int get_value(){return this->m_value;}
private:mutable int m_value;
};int main()
{test Test(20);int value = Test.get_value();Test.print_value();cout<<value<<endl;
}

修饰类对象(常对象)

常对象只能调用常成员函数。不能修改成员变量的值(除非有mutable修饰)

#include <iostream>
using namespace std;
class test
{public:test(int value) :m_value(value) {}test() {}~test() {}void print_value() const{cout << this->m_value << endl;}int get_value(){return this->m_value;}int m_value;mutable int m_date;
};int main()
{const test test01(100);// 错误,不能修改常对象中的成员变量的值,除非加mutabletest01.m_value = 1000;// 可以,因为m_date类型为mutable inttest01.m_date = 2021;// 可以,常对象可以调用常函数test01.print_value();// 不可以,常对象只能调用常函数int val = test01.get_value();
}

参考文章:
https://www.runoob.com/w3cnote/cpp-const-keyword.html

C++const关键字作用相关推荐

  1. c语言中const的作用面试,C语言const关键字作用

    C语言中const代表着"不可变",基本和常量一样不可修改,但是应用场景不一样. 一.应用在变量 const char a='A'; a='B';  //错误,变量a的值不可以修改 ...

  2. const关键字在c语言的作用,C语言const关键字作用

    C语言中const代表着"不可变",基本和常量一样不可修改,但是应用场景不一样. 一.应用在变量 const char a='A'; a='B';  //错误,变量a的值不可以修改 ...

  3. static、const、volatile等关键字作用

    目录 一.需要明白c语言中对象的一些属性 1.C语言中内存分配 2.变量的作用域 3.链接属性 4.存储期 二.static.const.volatile关键字作用 1.static关键字作用 2.c ...

  4. IOS 本地推送 IOS10.0以上 static的作用 const的作用

    //需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...

  5. 理解PHP5中static和const关键字

    PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想.我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助. (1) s ...

  6. C/C++ static和const关键字的作用

    static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...

  7. const关键字的作用?

    const关键字的作用 const关键字的作用如下六条 const关键字的作用如下六条 (1)欲阻止一个变量被改变,可以使用const关键字.在定义该const变量时,通常需要对它进行初始化,因为以后 ...

  8. C语言 关键字const的作用

    关键词解释 const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位.它限定一个变量不允许被改变,产生静态作用.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码 ...

  9. c语言中{的作用,C语言中Static和Const关键字的作用

    C语言中Static和Const关键字的作用 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中.那么关于C语言中Static和Const关键字的作用,你了解多少 ...

最新文章

  1. 《CDN 之我见》系列二:原理篇(缓存、安全)
  2. 【NLP】 NLP领域最具影响力的国内外会议介绍
  3. Windows XP 专业版与家庭版的区别
  4. OpenCV:OpenCV目标检测Adaboost+haar源代码分析
  5. P1080 国王游戏
  6. python 3.5安装pywin32
  7. 《Qt Quick 4小时入门》学习笔记4
  8. android 多线程封装,Android 线程池的封装
  9. mockit学习(一)
  10. python初识(2)
  11. ecshop 源码分析
  12. PXE网刻教程 教如何制作自己的DOS网卡驱动
  13. MDI Jade6的安装(含ocx控件的安装、PDF索引建立、修改注册表)
  14. 华为路由器基本配置命令
  15. 什么是POSIX system
  16. 双语美文|治愈系英文段子,你对人生过敏吗
  17. 小程序(四):微信登录功能的实现+云开发数据库
  18. 【猪八戒】- 2017年在线笔试“叠字问题”
  19. Linux系统编程-进程概念、进程管理、信号处理
  20. 吴恩达机器学习ex2-logistic regression python版

热门文章

  1. 使用ajax不刷新页面获取、操作数据
  2. 进入Docker容器命令
  3. Ubuntu更换阿里源以及由于没有公钥,无法验证下列签名错误
  4. 硬件安全模块如何启用AUTOSAR
  5. CVPR2020:4D点云语义分割网络(SpSequenceNet)
  6. NVIDIA安培架构
  7. 2021年大数据Hive(四):Hive查询语法
  8. [C] Bellman-Ford边松弛:解决负权边
  9. Python find方法与rfind方法的使用
  10. Androidx CoordinatorLayout 和 AppBarLayout 实现折叠效果(通俗的说是粘性头效果)