`
lianxiangbus
  • 浏览: 527693 次
文章分类
社区版块
存档分类
最新评论

const关键字的深入理解

 
阅读更多

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"}; // 错误!!
};

分享到:
评论

相关推荐

    C++中const关键字用法详解及实例和源码下载

    现在读到了const关键字的用法,书上面讲解的时候并没有给出完整的实例,只是理论的讲解了一些知识,后来在网上面搜了关于const的关键字的讲解,但是搜到的内容和书上面讲解的内容有着非常让人疑惑的东西,看看下面的...

    深入探讨C#中的const、readonly关键字

    主要介绍了深入探讨C#中的const、readonly关键字,本文可以帮助你深刻理解这两个关键字,而且是面试中最可能面试到的问题哦,需要的朋友可以参考下

    在嵌入式软件编程中深入理解关键字

    C语言以其简洁、高效和强大等特性成为嵌入式软件编程的首选语言,但是某些关键字,例如const、static、extern和volatile等,在不同的场合具有不同的含义,而且某些用法晦涩难懂,为此本文详细介绍这些关键字的用法...

    深入理解C++中常见的关键字含义

    const:定义常成员,包括const数据成员和const成员函数,const数据成员必须,也只能通过构造函数的初始化列表进行初始化,const成员函数只能访问类的成员,不能进行修改,如果需要修改,则引入下面的mutable关键字。...

    嵌入式系统/ARM技术中的在嵌入式软件编程中深入理解关键字

     计算机编程语言的关键字就好比是它的灵魂,只有深入理解了它们的含义才能编写出优秀的代码。C语言以其简洁、高效和强大等特性成为嵌入式软件编程的首选语言,但是某些关键字,例如const、static、extern和volatile...

    深入理解C++中的mutable关键字

    mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。  在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。  ...

    07111802_1120180488_王梓丞_lab41

    声明Declaration通过分析,我认为通过 const 等关键字对变量实现限制的 type-specifier 、规定变量存储类型的storage-clas

    C++中mutable与volatile的深入理解

    C++中修饰数据可变的关键字有三个:const、volatile和mutable。const比较好理解,表示其修饰的内容不可改变(至少编译期不可改变),而volatile和mutable恰好相反,指示数据总是可变的。mutable和volatile均可以和...

    嵌入式C语言内存操作编程

    掌握并深入理解关于数据指针、函数指针、动态申请内存、const 及volatile 关键字等的相关知识,是一个优秀的C 语言程序设计师的基本要求.当我们已经牢固掌握了上述技巧后,我们就已经学会了C 语言的99%,因为C 语言最...

    深入浅出ES6 简体中文

    当然,新的语言体系也在之前的基础上查漏补缺:弥补块级作用域变量缺失的let和const关键字;弥补面向大型项目缺失的模块方案;标准委员会甚至为JavaScript增加了类特性,有关这一方面的特性褒贬不一,Douglas ...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    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 ...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    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...

    C语言嵌入式系统编程修炼之内存操作

    掌握并深入理解关于数据指针、函数指针、动态申请内存、const及volatile关键字等的相关知识,是一个优秀的C语言程序设计师的基本要求。当我们已经牢固掌握了上述技巧后,我们就已经学会了C语言的99%,因为C语言最精华的...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    第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 类和结构中的...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    第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 类和结构中的...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    第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 类和结构中的...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    第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 类和结构中的...

Global site tag (gtag.js) - Google Analytics