看完了c++ primer的基础篇,对const还是有点陌生,在这里小小地总结一下吧。

1) const与变量

在变量的定义前加上 const 修饰符即可完成const对象的创建。

const int val = 5;

const变量的值不能改变

val = 5;    //error:assignment of read-only variable 'val'

需要注意的是,const变量必须初始化,因为一旦定义了const变量,其值便无法改变,故必须有初始值。

const int val2; //error:uninitialized const 'val2'

默认状态下,const对象仅在文件内有效

//file1.cc
const int val3 = 5;
int val4 = 6;
//file2.cc
//...
extern const int val3;
extern int val4;
cout << val3 << endl; //error:undefined reference to 'val3'
cout << val4 << endl; //ok

如果需要多个文件共享const变量,则只需在其声明和定义前加上关键字 extern 即可。

//file1.cc
extern const int val3 = 5;
int val4 = 6;
//file2.cc
//...
extern const int val3;
extern int val4;
cout << val3 << endl; //ok
cout << val4 << endl; //ok

2) const和指针

const double pi = 3.14; //double常量
double *ptr = &pi; //错误,double指针不能指向const double变量
const double *cptr = &pi; //正确,const double指针也可指向double变量
*cptr = 3.15; //错误,*cptr是const double类型,不能修改
double dval = 3.14;
cptr = &dval; //ok
*cptr = 3.15; //error
int errNumb = 0;
int *const curErr = &errNumb; //const pointer
const double *const pip = &pi;

顶层const表示指针本身是个常量

底层const表示指针所指的对象是一个常量

3) const与函数

void fcn(const int i){//...}
//fcn能够读取i,但不能修改i

函数设计时,对于较复杂的非内置类型应该尽量使用常量引用,值传递会造成不必要的浪费。

void func(string&);
const string str; func(str);//error
func("something")//error

如上例,如果只是想使用字符串的值,则形参类型应为const string&,否则会限制所能接受形参的类型,并会给人一种误导,即函数可以修改它的实参的值。

4) const与类

使用const限定符修饰类的对象,则在该对象的整个生命周期中,其数据成员永远不会被更改。

const class_name object;

在类的函数成员声明中,如果在参数列表后面加上const,就说明这个函数不能修改对象的任何数据成员(mutable成员除外,其值总是能够被修改),const可以理解为修饰隐式传入函数的this指针。

struct A {
void func() const { val = 0; } //error
private:
int val;
}

C++中const关键字用法总结的更多相关文章

  1. C++中const关键字用法

    为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...

  2. C#中var关键字用法分析

    原文连接 本文实例分析了C#中var关键字用法.分享给大家供大家参考.具体方法如下: C#关键字是伴随着.NET 3.5以后,伴随着匿名函数.LINQ而来, 由编译器帮我们推断具体的类型.总体来说,当 ...

  3. C/C++中const关键字的用法及其与宏定义的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 ; ; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用c ...

  4. C/C++中const关键字的用法及其与宏常量的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 ; ; 这两种写法是等价的,都是表示变量的值不能被改变,需要注意的是,用c ...

  5. C++中const关键字的使用总结

    C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...

  6. C/C++中const的用法 分类: C/C++ 2015-07-05 00:43 85人阅读 评论(0) 收藏

    const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结 ...

  7. (转) C/C++中const关键字详解

    文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...

  8. C++中const关键字的使用方法,烦透了一遍一遍的搜,总结一下,加深印象!!!

    之前一直在学习C/C++,关于const的使用,这里出现一点,那里出现一点.知识用时方恨少,这一段时间正好各种笔试题,其中关于const的用法也是层出不穷,所以疲于在书本上各种翻,这里汇总一下,加深自 ...

  9. C/C++中const关键字

    http://blog.csdn.net/xdrt81y/article/details/24333335 今天在做一个趋势笔试题的时候,才让我有了系统把const关键字好好总结一下的冲动,因为这个关 ...

随机推荐

  1. (转)shell调试方法

    ---恢复内容开始--- 转载:https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ Shell脚本调试技术 曹 羽中2007 年 ...

  2. Hadoop(4)MapReduce 任务的推测(speculative)执行

    Straggle(掉队者)是指那些跑的很慢但最终会成功完成的任务.一个掉队的Map任务会阻止Reduce任务开始执行. Hadoop不能自动纠正掉队任务,但是可以识别那些跑的比较慢的任务,然后它会产生 ...

  3. Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure........

    iframe引入视频的文件的时候报这个错 其实只要改成 加上一个s就好了  ...

  4. linux ssh终端解决中文乱码的问题

    @1:第一种办法: 在linux服务器里 命令行修改Linux服务器文件: vi /etc/sysconfig/i18n 默认的内容为: LANG="zh_CN.UTF-8" ; ...

  5. Dockerfile HEALTHCHECK详解

    Dockerfile中使用HEALTHCHECK的形式有两种: 1.HEALTHCHECK [options] CMD command(本次详细解释) 2.HEALTHCHECK NODE 意思是禁止 ...

  6. Main property in package.json defines package entry point

    I know my project's dependencies are installed under node_modules directory. But when I do require(' ...

  7. bs4 string与text的区别

    用python写爬虫时,BeautifulSoup真是解析html,快速获取所需数据的神器. 这个美味汤使唤起来,屡试不爽. 在用find()方法找到特定的tag后,想获取里面的文本,可以用.text ...

  8. 咏南中间件和开发框架全面支持DELPHI10.3.2

    咏南中间件和开发框架全面支持DELPHI10.3.2 易博龙公司2019年7月12日发布了RAD STUDIO10.3.2正式版本. 咏南中间件自2019年7月14日始,中间件.CS框架.WEB框架. ...

  9. CMMI基础知识扫盲

    CMMI全称是Capability Maturity Model Integration,CMMI是个好东西来的,但行内人士对她的认识并不全面,甚至有种种的误解.尽管网上有很多CMMI相关介绍,但一般 ...

  10. arcgis python 布局视图中文本查找替换

    # Author: ESRI # Date: July 5, 2010 # Version: ArcGIS 10.0 # Purpose: This script will perform a sea ...