C++中的const 深入理解

栏目: C++ · 发布时间: 6年前

内容简介:const是C++中一个让人非常容易误解的特行。它最简单的用法是被它修饰的变量被称为常量,一旦被初始化后就不能再被修改。但,有时const又是非常复杂,甚至让很多的程序员感到“可拍”。const的简单用法

const是C++中一个让人非常容易误解的特行。

它最简单的用法是被它修饰的变量被称为常量,一旦被初始化后就不能再被修改。但,有时const又是非常复杂,甚至让很多的 程序员 感到“可拍”。

const的简单用法

最简单的用法是声明一个常量,这是在C/C++出现之前就有的一个编程语言的特性。

声明常量只需要在变量前添加const修饰符即可,但是在声明的同时要进行初始化,因为常量是不能被修改的。

const int a = 10; //声明a为常量,其值为10,不可被修改

将那些在程序编译后就不在改变的量设为常量是非常有用的。相对于C中的#define 预处理指令,const更易于理解,并且不像#define是在编译器处理之前对源代码进行文本处理,const是被编译器所支持的,因此在遇到错误时可以得到更多的有用信息。

const也是可以修饰指针的,这时候就要小心了,要注意const修饰的是指针本身,还是修饰指针所指向的值。

const int *a;

int const *a;

上面声明了一个指针变量a,指向一个整型常量(也就是不能通过指针a修改其指向的值,因为它指向的是一个常量,但是可以改变a的指向)。

int *const a;

这里声明的a是一个常量指针,指向一个整型变量(可以通过指针a修改其指向整型的值,但是不能将指针重新指向其他的变量)。

int const * const a;

a是一个常量指针,指向一个整型常量。

const是左结合的,也就是会修饰它左边,当它左边没有没有可修饰的时候它修饰就是它右边的。

const修饰函数的返回值

当一个指针或者引用指向的是一个常量时这在某些情形下是非常有用的,特别函数是作为函数的返回类型时是很有作用的。既可以享受到指针或者引用传值的便利性又不用担心通过指针或者引用修改具体的值。

例如

char* f(){

return "some text";

}

假如没有const的修饰,可以又下面的代码

f()[0] = 'h';

这在某些情况下可能导致程序出现错误,但是如果使用了const修饰

const char* f(){

}

在通过返回的指针修改其指向的值就会到的编译错误,可以避免上述情况的发生。

const修饰函数的参数

在C/C++中,通过值传递的只是实参的一个copy,在函数中做的任何修改都不会影响到实参。通过指针或者引用传递的参数却可以在函数中修改其具体的值,但是这又引发了一个问题,有些值使用指针或者引用传递的消耗比较低(例如,结构体或者类作为函数参数时,使用指针或者引用传递就省掉了copy的过程)所以要使用指针或者引用来传递参数,但是却不希望在函数体内通过指针(或者引用)修改传递过去的值,这时候就可以使用const修饰参数。

void f(const string& str){

}

const修饰类成员

使用const可以修饰类的成员变量,const类型的成员变量已经初始化就不能再被修改,并且要将其放在初始化列表中初始化。

cosnt也可以修饰类的成员方法,经过其修改的方法不能改变类的状态。

class c1{

int m;

void f() const;

}

void c1::f()const {

m += 1;

}

上述代码会出现编译错误,因为const方法修改类中的成员变量。

结束语

公司实习有2个周了,感觉收获确实确实很大,平常的理论学习应用到实际中还是有很大的不同。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-05/158610.htm


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机组成(第 6 版)

计算机组成(第 6 版)

Andrew S. Tanenbaum、Todd Austin / 刘卫东、宋佳兴 / 机械工业出版社 / 2014-8-19 / CNY 99.00

本书采用结构化方法来介绍计算机系统,书的内容完全建立在“计算机是由层次结构组成的,每层完成规定的功能”这一概念之上。作者对本版进行了彻底的更新,以反映当今最重要的计算机技术以及计算机组成和体系结构方面的最新进展。书中详细讨论了数字逻辑层、微体系结构层、指令系统层、操作系统层和汇编语言层,并涵盖了并行体系结构的内容,而且每一章结尾都配有丰富的习题。本书适合作为计算机专业本科生计算机组成与结构课程的教......一起来看看 《计算机组成(第 6 版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具