const简单介绍:

1不再使用c中的#define,c++默认不给const定义的变量分配内存,所以它默认的是仅本文件可以看到该变量(即internal linkage),

const int bufisze;

如果工程中的文件看见,就要明显的写出关键字extern,即,此时编译器会给它分配内存。

extern const int bufisze = 100;

另外:

extern const int bufsize;//只是声明不是定义

const int bufsize=;//必须加上如此定义

// int bufsize=1;!error
//bufsize=1;erro const buf;//错误,因为默认的只有内部文件可见,必须定义的时候就初始化。

2 const修饰参数

表示该参数不能改变。

void  f(const int i){
i++;//error}

注:

在使用某些类,特别是比较大的类的时候,我们经常看到参数的形式如  fun(const Integer & a),(Integer 是某个自定义类)使用引用和const。我对此的理解是:

1  ”引用参数”的效率优于“传值参数”。传值调用参数是一个局部变量,会被初始化为相同的参数值,那么调用函数时候会存在两个副本,而引用相当于直接用了那个地址的参数。(所以函数中若改变了引用的参数,结果会保留)

2我们既不想创造两个副本,所以用“引用&”,不要确定该类的参数没有被改变,所以经常我们会看到这种语法,

const Integer & a,既提高效率,又确定不改变类a

3返回Const(Returning by const value)//防止该函数作为左值lvalue

主要针对,返回值为自定义的类,对于built-in type(如int,double),加不加无所谓。

const X f6();

f6()=X(1)//error

其目的就是为了实现用户自定义类型与内置类型最大限度的保持一致性。

比如操作 a+b = c; 对于内置类型在编译时,会弹出不能对lvalue进行赋值的错误;然而对于用户自定义类型,比如class A{}; 当对A定义了形式为

A operator+(const A& lhs, const A& rhs){};的接口时,编译和连接过程不会出现内置类型弹出的错误。

解决办法就是给函数的返回值加上const标识,指定不能对函数的返回值进行赋值,如此一来,对于自定义类型,再进行a+b = c;操作时,编译过程也会报错。

在现实的编码中,可能谁也不会敲出a+b=c;这样的单纯语句,但是你不可能保证在你想表达if(a+b == c)时,却一时马虎写成了if(a+b = c),程序能够编译连接通过,但不是按你想要的逻辑运行,于是问题就出现了,这个问题应该再编译时期就被发现的

//此段参考http://blog.csdn.net/zhjxin1800/article/details/7584375

4成员函数Const

如果你有一个成员函数,他不应该更改该对象成员(非静态)的值,就应该在声明,定义最后加const

void ouput() const;

该类的const对象,只能调用const成员函数,不能调用非const成员函数。

本人水平有限,怀着分享学习的态度发表此文,欢迎大家批评,交流。感谢您的阅读。

欢迎转载本文,转载时请附上本文地址:  http://www.cnblogs.com/Dzhouqi/p/3393203.html

另外:欢迎访问我的博客 http://www.cnblogs.com/Dzhouqi/

c++ const 关键字 学习笔记的更多相关文章

  1. C++中的const关键字学习笔记

    一.const引用 1. 例子一 #include <iostream> using namespace std; class sp { public: sp() {cout<< ...

  2. Java this关键字 学习笔记

    前言: 这篇博文就是系统的学习一下Java中的this关键字,本人对this关键字的理解知识简单的停留在对  类的成员变量进行赋值,这次所以决定系统的体会一下this 关键字 转自:https://b ...

  3. namespace关键字学习笔记

    一.namespace简介 namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越 ...

  4. C语言学习及应用笔记之三:C语言const关键字及其使用

    在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图. 事实上,无论我 ...

  5. C语言学习笔记--const 和 volatile关键字

    1.const关键字 (1)const 修饰的变量是只读的,它不是真正的常量,本质还是变量,只是告诉编译器不能出现在赋值号左边! (2)const 修饰的局部变量在栈上分配空间 (3)const 修饰 ...

  6. ES6学习笔记<一> let const class extends super

    学习参考地址1  学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...

  7. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)——VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  8. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  9. 《从零开始学Swift》学习笔记(Day5)——我所知道的标识符和关键字

    Swift 2.0学习笔记(Day5)——我所知道的标识符和关键字   原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小小的整 ...

随机推荐

  1. [转]重叠IO

    本章回答了如下几个问题: ◆ 什么是Overlapped I/O?为什么需要Overlapped I/O?如何让数据传输支持Overlapped I/O? ◆ 数据传输结束后,Win32提供了哪些方式 ...

  2. HotSpot算法实现

    1.枚举根节点 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中. 可达性分析对执行时间的敏感体现在GC停顿上,因为分析工作必须在能确保一 ...

  3. android浪漫樱花凋零动态壁纸应用源码

    android浪漫樱花凋零动态壁纸应用源码,是从那个安卓教程网拿过来的,本项目是一套基于安卓的樱花动态壁纸项目源码,安装以后桌面没有图标,但是可以在修改壁纸-动态壁纸中找到.我的分辨率是480×854 ...

  4. nutch安装配置

    http://nlp.solutions.asia/?p=180 http://www.promenade.me/archives/146 环境 ubuntu 12.04 sql建表 CREATE D ...

  5. Linux rar

    http://www.vpsyou.com/2010/06/15/to-extract-rar-centos.html wget http://www.rarsoft.com/rar/rarlinux ...

  6. Facebook SDK

    <?php session_start(); header('Content-type:text/html; charset=UTF-8'); require_once './facebook- ...

  7. 搭建pptpd实现vpn

    PPTP(Point to Point Tuneling Protocol,点对点隧道协议)是一种主要用于VPN的数据链路层网络协议. 环境:debian 7.0 在linux下安装pptpd服务实现 ...

  8. psp系统需求分析

    软件开发方向“PSP系统”软件需求规约 目录 1 引言... 4 1.1 目的... 4 1.2 文档格式... 4 1.3 预期的读者和阅读建议... 4 1.4 范围... 5 1.5 术语... ...

  9. 使用公钥登录SSL

    在本地生成密钥对 ssh-keygen -t rsa 如果不想设置密码,可以直接点击回车. 如果你想使用DSA可以用-t DSA替换. 确保远程计算机上用户目录下有.ssh目录 确保你的连接服务器上的 ...

  10. Xubuntu 安装mentohust

    对于路由器上网到用户来说,自动分配IP上网。 对于校园网用户,首先下载mentohust_0.3.4-1_i386.deb,双击安装程序 然后在命令窗口中输入sudo -s 密码:user来获得roo ...