C++学习——const

文章目录

    • 1.const的作用
    • 2.const成员函数的理解和应用?

1.const的作用

1. 阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;

#include<iostream>
using namespace std;int main() {const a = 10;a = 19;//const修饰a,a不能修改return 0;
}

2. 对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;

1)const修饰指针时,由于const的位置不同,它的修饰对象会有所不同。2)   int *const p2中const修饰p2的值,所以理解为p2的值不可以改变,即p2只能指向固定的一个变量地址,
但可以通过*p2读写这个变量的值。顶层指针表示指针本身是一个常量3)   int const *p1或者const int *p1两种情况中const修饰*p1,所以理解为*p1的值不可以改变,
即不可以给*p1赋值改变p1指向变量的值,但可以通过给p赋值不同的地址改变这个指针指向。
底层指针表示指针所指向的变量是一个常量。4)   int const *const p;

3 在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;

#include<iostream>
using namespace std;void print(const int a) {a = 10;//错误,不能修改a的值cout << a << endl;
}int main() {int a = 1;print(a);return 0;
}

4 对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量,类的常对象只能访问类的常成员函数;

常成员函数的格式:

function_type function_name() const{......
}
class solution {
public:void print() const {a = 100;//错误,常成员函数不能修改成员变量cout << "const function" << endl;}
private:int a = 10;
};int main() {solution s;s.print();return 0;
}

5 对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。

#include<iostream>
using namespace std;class solution {
public:const int return_value(int a) {return a * 10;}int return_value2(int a) {return a * 100;}
};int main() {solution s;int a = 10;int b = 1;int value;value = s.return_value(a);cout << value << endl;value = 108;//正确
}

6 const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员;

7 非const成员函数可以访问非const对象的非const数据成员、const数据成员,但不可以访问const对象的任意数据成员,因为const对象只能调用const成员函数

8 一个没有明确声明为const的成员函数被看作是将要修改对象中数据成员的函数,而且编译器不允许它为一个const对象所调用。因此const对象只能调用const成员函数。

9 const类型变量可以通过类型转换符const_cast将const类型转换为非const类型;

10 const类型变量必须定义的时候进行初始化,因此也导致如果类的成员变量有const类型的变量,那么该变量必须在类的初始化列表中进行初始化;

11 对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参。则这个时候无论加不加const对实参不会产生任何影响。但是在引用或指针传递函数调用中,因为传进去的是一个引用或指针,这样函数内部可以改变引用或指针所指向的变量,这时const 才是实实在在地保护了实参所指向的变量。因为在编译阶段编译器对调用函数的选择是根据实参进行的,所以,只有引用传递和指针传递可以用是否加const来重载。一个拥有顶层const的形参无法和另一个没有顶层const的形参区分开来。

2.const成员函数的理解和应用?

const Stock & Stock::topval (const Stock & s)const①处const:确保返回的Stock对象在以后的使用中不能被修改②处const:确保此方法不修改传递的参数 S③处const:保证此方法不修改调用它的对象,const对象只能调用const成员函数,不能调用非const函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/483091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决表单提交的数据丢失问题

解决表单提交的数据丢失问题&#xff1a; 一、问题描述&#xff1a; 当我们在给前台页面设置修改功能的时候&#xff0c;因为有些信息是不允许进行修改的&#xff0c;所以在修改表单中没有相应的修改输入框&#xff0c;但是在修改表单的数据提交的时候&#xff0c;那些不允许修…

科学家即将揭示人类大脑神经网络结构的奥秘

来源&#xff1a;今日头条人类即将迎来了解大脑神经网络结构神秘世界的曙光&#xff01;哈佛大学神经科学家和谷歌工程师&#xff0c;发布了第一张人类大脑部分的神经网络连接图&#xff0c;大约针头大小的人类大脑组织用重金属染色&#xff0c;切成 5,000&#xff0c;并在电子…

C++学习—— mutable和 extern

文章目录1. mutable2.extern用法&#xff1f;1. mutable 1) 如果需要在const成员方法中修改一个成员变量的值&#xff0c;那么需要将这个成员变量修饰为mutable。即用mutable修饰的成员变量不受const成员方法的限制; 常成员函数&#xff0c;不允许修改成员变量的值&#xff0c…

温故而知新,6位顶级CV科学家聚首:计算机视觉中的深度学习方法vs传统方法...

来源&#xff1a;AI科技评论作者&#xff1a;Mr Bear编辑&#xff1a;青暮2021 年 10 月 13 日&#xff0c;来自麻省理工学院、加州大学伯克利分校、伊利诺伊大学香槟分校、华盛顿大学、帝国理工学院的六名顶级人工智能科学家、计算机视觉科学家在 ICCV 2021 大会期间进行了题为…

20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK

demo代码如下: private void btnPrint_Click(object sender, EventArgs e){if (this.btnPrint.Text "停止打印"){SetBtnPrintUIEnable();return;}//禁用界面上的相关按钮SetBtnPrintUIDisable();var dt new DataTable(); new Task(() >{///开始的打印//1. 获取…

C++学习——string

文章目录1.int转字符串字符串转int?2.strcat,strcpy,strncpy,memset,memcpy的内部实现&#xff1f;1.int转字符串字符串转int? 例:"123"123#include<iostream> #include<string> using namespace std;string string_head_end(string str) {string s&q…

卷积神经网络(CNN)数学原理解析

来源&#xff1a;图灵人工智能作者&#xff1a;Piotr Skalski编辑&#xff1a;python数据科学原标题&#xff1a;Gentle Dive into Math Behind Convolutional Neural Networks翻 译&#xff1a; 通夜&#xff08;中山大学&#xff09;、had_in&#xff08;电子科技大学&#…

仅模糊背景图像而不是前面的文本

正如标题所说。 如何模糊容器的背景图像而不模糊前面的文本&#xff1f; <div class"card"> <div class"head"> <div class"title"> <span>Card Title</span> </div> </div> <div class"body…

C++学习——模板

文章目录1.C模板2.C模板是什么&#xff0c;底层怎么实现的&#xff1f;1.C模板 模板是泛型编程的基础&#xff0c;泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。 库容器&#xff0c;比如迭代器和算法&#xff0c;都是泛型编程的例…

【数据结构基础】-串-顺序结构的基本操作实现

2019.10.12 数据结构中串的基本操作实现&#xff0c;包括串的定义&#xff0c;串的初始化&#xff0c;赋值&#xff0c;获取串的长度&#xff0c;串的比较&#xff0c;连接串&#xff0c;求子串&#xff0c;清空串。 语言&#xff1a;c语言 运行环境&#xff1a;dev #include &…

大脑研究正在挑战超级计算,“人脑计划”或需提前部署百亿亿级超级计算机...

来源&#xff1a;DeepTech深科技人脑的复杂性正推动着超级计算释放更多的潜力。据了解&#xff0c;人脑包含大约 860 亿个神经元&#xff0c;可形成数万亿个接触点。如果以细胞分辨率对整个大脑进行成像&#xff0c;甚至会产生数 PB 范围内的数据&#xff0c;这样的的计算量令人…

02 算术、字符串与变量(1)

本章内容 1、交互式命令shell 2、整数算术 3、浮点算术 4、其他数学函数 5、字符串 6、字符串拼接 7、获取帮助 8、类型转换 9、变量和值 10、赋值语句 11、变量如何引用值 12、多重赋值 -------------------------------------- 在学习Python前&#xff0c;我们需要了解数据类…

C++学习——c语言和C++语言中的struct

C语言struct和Cstruct区别 C语言中&#xff1a;struct是用户自定义数据类型&#xff08;UDT&#xff09;&#xff1b; C中struct是抽象数据类型&#xff08;ADT&#xff09;&#xff0c;支持成员函数的定义&#xff0c;&#xff08;C中的struct能继承&#xff0c;能实现多态&am…

【数据结构基础】-线性表的顺序实现(数组实现)基本操作

2019.10.10 【数据结构-线性表的顺序结构】 基本操作&#xff1a;初始化&#xff0c;判断是否空表&#xff0c;清空表&#xff0c;获取表中的第i个元素&#xff0c;查找元素&#xff0c;插入元素&#xff0c;删除元素&#xff0c;获取表的元素个数。 抽象数据类型&#xff1a…

机器学习驱动技术是生物学进步的下一个突破

来源&#xff1a;ScienceAI作者&#xff1a;Immunai 联合创始人兼 CEO&#xff0c;Luis Voloch编译&#xff1a;绿萝数字生物学与 90 年代的互联网处于同一发展阶段&#xff08;早期、激动人心和变革性&#xff09;。当时&#xff0c;IP 地址的概念还很新&#xff0c;「精通技术…

makefile编译erlang

https://www.cnblogs.com/witton/p/6868963.html转载于:https://www.cnblogs.com/hshy/p/11096625.html

C++学习——内联函数

文章目录1.内联函数1.1 什么是内联函数1.2 内联函数的声明1.3 内联函数的条件2.成员函数与内联函数2.1 内联成员函数2.2 判断成员函数时候为内联函数3. 虚函数可以声明为inline吗1.内联函数 1.1 什么是内联函数 C提供一种提高函数效率的方法&#xff0c;即在编译时将被调函数…

实现调用API接口

API是一组封装好的函数&#xff0c;通过API&#xff0c;你可以为应用快速扩展功能&#xff0c;而无需理解它们是如何实现的&#xff0c;从而提升开发效率。通常&#xff0c;API服务商会提供API文档&#xff0c;那么如何根据文档来使用API呢&#xff1f; PS:该文章内容来自于阿里…

量子力学与机器学习相结合,预测高温下的化学反应

来源&#xff1a;ScienceAI编辑&#xff1a;凯霞在高温下从氧化物中提取金属不仅对于钢铁等金属的生产至关重要&#xff0c;而且对回收利用也必不可少。但当前的提取过程是碳密集型的&#xff0c;会排放大量温室气体。研究人员一直在探索开发「更绿色」的工艺方法。第一性原理理…

js实现右键单击打开自定义的菜单

今天分享一个&#xff0c;单击鼠标右键弹出自定义菜单&#xff0c;选中不同菜单选项&#xff0c;实现其对应功能 首先先自已定义一个菜单 <div id"menu"><ul><li>添加</li><li>删除</li><li>修改</li></ul>&l…