C++const关键字作用
修饰普通变量,表示不可修改(在定义的时候必须初始化)
#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关键字作用相关推荐
- c语言中const的作用面试,C语言const关键字作用
C语言中const代表着"不可变",基本和常量一样不可修改,但是应用场景不一样. 一.应用在变量 const char a='A'; a='B'; //错误,变量a的值不可以修改 ...
- const关键字在c语言的作用,C语言const关键字作用
C语言中const代表着"不可变",基本和常量一样不可修改,但是应用场景不一样. 一.应用在变量 const char a='A'; a='B'; //错误,变量a的值不可以修改 ...
- static、const、volatile等关键字作用
目录 一.需要明白c语言中对象的一些属性 1.C语言中内存分配 2.变量的作用域 3.链接属性 4.存储期 二.static.const.volatile关键字作用 1.static关键字作用 2.c ...
- IOS 本地推送 IOS10.0以上 static的作用 const的作用
//需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...
- 理解PHP5中static和const关键字
PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想.我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助. (1) s ...
- C/C++ static和const关键字的作用
static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值: (2)在模块内的stat ...
- const关键字的作用?
const关键字的作用 const关键字的作用如下六条 const关键字的作用如下六条 (1)欲阻止一个变量被改变,可以使用const关键字.在定义该const变量时,通常需要对它进行初始化,因为以后 ...
- C语言 关键字const的作用
关键词解释 const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位.它限定一个变量不允许被改变,产生静态作用.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码 ...
- c语言中{的作用,C语言中Static和Const关键字的作用
C语言中Static和Const关键字的作用 程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于(堆)中.那么关于C语言中Static和Const关键字的作用,你了解多少 ...
最新文章
- 《CDN 之我见》系列二:原理篇(缓存、安全)
- 【NLP】 NLP领域最具影响力的国内外会议介绍
- Windows XP 专业版与家庭版的区别
- OpenCV:OpenCV目标检测Adaboost+haar源代码分析
- P1080 国王游戏
- python 3.5安装pywin32
- 《Qt Quick 4小时入门》学习笔记4
- android 多线程封装,Android 线程池的封装
- mockit学习(一)
- python初识(2)
- ecshop 源码分析
- PXE网刻教程 教如何制作自己的DOS网卡驱动
- MDI Jade6的安装(含ocx控件的安装、PDF索引建立、修改注册表)
- 华为路由器基本配置命令
- 什么是POSIX system
- 双语美文|治愈系英文段子,你对人生过敏吗
- 小程序(四):微信登录功能的实现+云开发数据库
- 【猪八戒】- 2017年在线笔试“叠字问题”
- Linux系统编程-进程概念、进程管理、信号处理
- 吴恩达机器学习ex2-logistic regression python版