看完了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. Python3 输入和输出(一)

    1.输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数. 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用. 如果希望输出 ...

  2. Java学习日记基础篇(四)——类,对象之成员变量,成员方法,构造方法

    面向对象(Object Oriented) 一.面向对象杂谈 面向对象(Object Oriented),我的翻译是以物体为目标的,就是说编程的时候是建立一个物体,然后对这个物体进行操作. Java语 ...

  3. python3编程基础之一:标识符

    每种编程语言都是需要处理数据的,需要变量.函数.类等,而这些都是通过名称访问的.因此,能够作为变量.函数.类等名称的字符串就是标识符.数据,是计算机进行运算的实体.标识符,用来标记的符号,它会指向一个 ...

  4. Jenkins中插件下载失败的解决办法

    插件下载失败原因:通过国外服务器下载镜像,有较高的失败率,某些插件下载失败或者中断会引起其他有依赖关系的插件也下载失败 解决方案:1. 使用VPN.2. Jenkins镜像地址改为国内镜像地址:系统管 ...

  5. RethinkDB是什么?—— 面向文档的NOSQL数据库,MVCC+Btree索引,pushes JSON to your apps in realtime采用push思路,优化的ssd存储

    RethinkDB是什么? RethinkDB是新一代的面向文档的数据库存储管理系统,原本是MySQL中针对SSD优化的一个存储引擎,后来脱离了MySQL成为了独立的系统. 数据如何存储在磁盘上? 数 ...

  6. Linux 安装软件报错 Sub-process /usr/bin/dpkg returned an error code (1)

    Linux 通过 apt-get 安装软件时报错,换一个软件安装也一样. Errors were encountered while processing: blueman E: Sub-proces ...

  7. arcgis python 异常处理和信息处理

    #coding=utf8 import arcpy import os import sys import ylpy try: a=1111111 b=0000 c=a/b except Except ...

  8. python: 关于解决'\u'开头的字符串转中文的方法

    爬虫爬到的内容是这样的: 如果直接打印出来是这样的: python3的解决办法:字符串.encode('utf-8').decode('unicode_escape') python2:字符串.dec ...

  9. Flutter移动电商实战 --(44)详细页_首屏自定义Widget编写

    把详细页的图片.标题.编号和价格形成一个单独的widget去引用 详情页的顶部单独封装个插件 在pages下面新建detials_page的文件件并在里面新建页面details_top_area.da ...

  10. Matlab 图像平移、旋转、缩放、镜像

    今天学习了用Matlab实现对图像的基本操作.在Matlab中,图像是按照二维矩阵的形式表示的.所以对图像的操作就是对矩阵的操作. 对图像进行缩放.平移.旋转,都可以转化为矩阵的运算. 关于变换矩阵的 ...