const作为c++语言的关键字,我们的设计原则是,尽量多使用const变量:
那么为什么是这样呢,c++语言引入指针的不足之处就是内存的管理变复杂,容易出现引用出错,所以我们有时需要对不能够更改的地址空间进行保护即只能读,不能写,这个保护的方式就是定义为const,由const修饰的内存空间不能够写。
通过const的使用可以保护容易受破坏的内存,提高程序的稳健性,使得违规写错误在编译时期就暴露出来,从而及时修改。
const的用法:修饰变量,修饰指针和引用,修饰成员函数三种,我们分别讨论:
1.修饰常量是最简单的,最基本的用法:
const int a=100; b的内容不变,b只能是100也就是声明一个int类型的常量(#define b =100)
int const b=100; //和上面作用一样
const指针和引用一般用在函数的参数中
int* m = &a; //出错,常量只能用常指针
int c= 1;const int*pc = &c;//常指针可指向常量
2.修饰指针和引用,const在*号左侧指指针的值不能改变,const在*号右侧指指针指向的数值不能改变;
const int* pa = &a; //指针指向的内容为常量(就是b的值不变)
int const *a = &b; //指针指向的内容为常量(就是b的值不变)*p=3//error
int* const a = &b; //指针为常量,不能更改指针了如 a++但可以改值*p=3;
从这可以看出const放在*左侧修饰的是指针的内容,const放在*右侧修饰的是指针
本身.
const引用的用法和指针一样
int const & a=b; 和指针一样
const int& a=b; 和指针一样
但没有 int& const a=b 的用法因为引用不能做移位运算,但只是出个warning
3.const对于成员函数:如
const char* why()const{return "test"};
const char* 这里的const表示返回内容不可更改,如:
X.why() = "hello"; //错误
why()const表示该函数不修改数据成员的值,如:
class X
{
int a;
public:
const char* why()const{a = 2;return "test"}; // 错误!!
}; const char* why()const{return "test"};
const char* 这里的const表示返回内容不可更改,如:
X.why() = "hello"; //错误
why()const表示该函数不修改数据成员的值,如:
class X
{
int a;
public:
const char* why()const{a = 2;return "test"}; // 错误!!
}; const char* why()const{return "test"};
const char* 这里的const表示返回内容不可更改,如:
X.why() = "hello"; //错误
why()const表示该函数不修改数据成员的值,如:
class X
{
int a;
public:
const char* why()const{a = 2;return "test"}; // 错误!!
};
分享到:
相关推荐
现在读到了const关键字的用法,书上面讲解的时候并没有给出完整的实例,只是理论的讲解了一些知识,后来在网上面搜了关于const的关键字的讲解,但是搜到的内容和书上面讲解的内容有着非常让人疑惑的东西,看看下面的...
主要介绍了深入探讨C#中的const、readonly关键字,本文可以帮助你深刻理解这两个关键字,而且是面试中最可能面试到的问题哦,需要的朋友可以参考下
C语言以其简洁、高效和强大等特性成为嵌入式软件编程的首选语言,但是某些关键字,例如const、static、extern和volatile等,在不同的场合具有不同的含义,而且某些用法晦涩难懂,为此本文详细介绍这些关键字的用法...
const:定义常成员,包括const数据成员和const成员函数,const数据成员必须,也只能通过构造函数的初始化列表进行初始化,const成员函数只能访问类的成员,不能进行修改,如果需要修改,则引入下面的mutable关键字。...
计算机编程语言的关键字就好比是它的灵魂,只有深入理解了它们的含义才能编写出优秀的代码。C语言以其简洁、高效和强大等特性成为嵌入式软件编程的首选语言,但是某些关键字,例如const、static、extern和volatile...
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 ...
声明Declaration通过分析,我认为通过 const 等关键字对变量实现限制的 type-specifier 、规定变量存储类型的storage-clas
C++中修饰数据可变的关键字有三个:const、volatile和mutable。const比较好理解,表示其修饰的内容不可改变(至少编译期不可改变),而volatile和mutable恰好相反,指示数据总是可变的。mutable和volatile均可以和...
掌握并深入理解关于数据指针、函数指针、动态申请内存、const 及volatile 关键字等的相关知识,是一个优秀的C 语言程序设计师的基本要求.当我们已经牢固掌握了上述技巧后,我们就已经学会了C 语言的99%,因为C 语言最...
当然,新的语言体系也在之前的基础上查漏补缺:弥补块级作用域变量缺失的let和const关键字;弥补面向大型项目缺失的模块方案;标准委员会甚至为JavaScript增加了类特性,有关这一方面的特性褒贬不一,Douglas ...
18.3.2 理解异步任务 518 18.3.3 任务延续 521 18.3.4 用AggregateException处理Task上的未处理异常 525 18.4 取消任务 530 18.4.1 Task.Run()是Task.Factory.StartNew()的简化形式 532 ...
7.5.2 使用const关键字创建静态字段 130 7.5.3 静态类 130 7.5.4 匿名类 132 第7章快速参考 134 第8章 理解值和引用 135 8.1 复制值类型的变量和类 135 8.2 理解null值和可空类型 139 8.2.1 使用可空类型 140...
掌握并深入理解关于数据指针、函数指针、动态申请内存、const及volatile关键字等的相关知识,是一个优秀的C语言程序设计师的基本要求。当我们已经牢固掌握了上述技巧后,我们就已经学会了C语言的99%,因为C语言最精华的...
第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间共享内存 8.3.1 定义联台 8.3.2 匿名联合 8.3.3 类和结构中的...
第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间共享内存 8.3.1 定义联台 8.3.2 匿名联合 8.3.3 类和结构中的...
第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间共享内存 8.3.1 定义联台 8.3.2 匿名联合 8.3.3 类和结构中的...
第8章 深入理解类 8.1 类的析构函数 8.1.1 析构函数的概念 8.1.2 默认的析构函数 8.1.3 析构函数与动态内存分配 8.2 实现复制构造函数 8.3 在变量之间共享内存 8.3.1 定义联台 8.3.2 匿名联合 8.3.3 类和结构中的...