以前老是对const概念不清不楚,今天算是好好做个笔记总结一下。以下内容包括1)常量指针(指针本身是常量),2)指针常量(指针指向的是常量对象),3)常量引用,4)const成员函数。

常量指针,指针是一个常量,常量指针必须初始化,而初始化一旦完成,也就是存放在指针中那个地址不能再改变了

指针常量,意思是指针指向的是一个常量对象。

int *const curErr;从右往左读,const curErr是一个常量对象,*const curErr 是一个常量指针,int *const curErr 解释:常量指针指向i的是一个int型对象。

1)常量指针想要改变其指向的对象是会报错的!

常量指针示例

 2)指针常量想改变指向对象的值时会对指针进行解引用,而这一过程相当于对常量对象做赋值操作,会报错!

指针常量示例:

3)const的引用

 与普通引用不同的是,对常量的引用不能被用作修改它所绑定的对象。

注:对const的引用我们一般称为常量引用,但请记住,引用不是对象。

对常量引用和指针常量做一个比较和总结:

指针常量和常量引用一样,指向常量的指针也没有规定其所指的对象必须是一个常量。所谓指向常量的指针仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其它途径改变。

4)const成员函数 

const在类成员函数中还有种特殊的用法,把const关键字放在函数的参数表和函数体之间,称为const成员函数,其特点有二:

1)只能读取类数据成员,而不能修改之。

2)只能调用const成员函数,不能调用非const成员函数。

 #include <iostream>
using namespace std; class point
{
int x; //默认为private的数据成员x和y
int y; public:
point(int xp = , int yp = ) //构造函数
{
x = xp;
y = yp;
} void print() const //const成员函数内无法修改数据成员,否则编译器报错
{
x = ; //1. 试图修改x将引发编译器报错
set(); //2. 试图调用非const函数将引发编译器报错
cout << "x: " << x << " ,y: " << y << endl;
} void set() //将set()定义成const函数就能解决问题
{
}
}; int main()
{
point pt; //声明类对象,以缺省参数形式调用构造函数
pt.print(); //调用const成员函数 return ;
}

const 相关知识 const和指针、const和引用的更多相关文章

  1. 前端项目中常用es6知识总结 -- let、const及数据类型延伸

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const  2 ...

  2. const关键字与数组、指针

    目录 const关键字 const修饰数组 const修饰指针 用两个const修饰指针 @ 开始回顾C基础知识.C中使用指针是很危险的事情,一个不慎就会造成程序崩溃,因此对于传入函数的参数进行保护就 ...

  3. C指针-const char* p到底是什么不可以改变

    char a = 'w'; char b = 'q'; const char* p = &a; p = &b; printf("%c",p[0]); 如上一段代码, ...

  4. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  5. C++ Primer 第二章 引用 指针 const限定符

    1.引用: 为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d也就是声明的变量名(声明符就是变量名). PS:1.通过图片中编译所提示的报错信息 ...

  6. C++中const修饰基本数据类型、指针、引用、对象

    const修饰基本数据类型 #include <iostream> using namespace std; void main(){ const int a = 1; const cha ...

  7. 如果参数是指针,且仅作输入用,则应在类型前加 const,以防止该 指针在函数体内被意外修改

    如果参数是指针,且仅作输入用,则应在类型前加 const,以防止该 指针在函数体内被意外修改. #include <iostream> /* run this program using ...

  8. 数组/指针/const/字符串常量的使用传值问题

    #include<stdio.h> #include<string.h> int main() { ] = "abcd"; //常指针a指向字符串常量&qu ...

  9. (转)Const,Const函数,Const变量,函数后面的Const

    本文转自http://www.cnblogs.com/Fancyboy2004/archive/2008/12/23/1360810.html 看到const 关键字,C++程序员首先想到的可能是co ...

随机推荐

  1. Oracle三层嵌套分页查询示例及rownum原理

    eg:COMPONENT表数据如下 1.执行select * from (select com.*,rownum  r_num  from (select * from COMPONENT)com w ...

  2. jlink烧写Nor Flash时出错正确解决方法汇总:PC of target system has unexpected value after programming

    成都国嵌的课程:国嵌体验入门班-2-1(开发板系统安装-Jlink方式).rar毒害了不少人,那种直接烧写nor flash,不进行任何配置的方法,能够成功纯属偶然,他自己在视频中烧写时也出现了两次错 ...

  3. Android常见Crash类型分析(一)

    问题1.   java.lang.IllegalStateException: The specified child already has a parent. You must call remo ...

  4. R语言实现SOM(自组织映射)模型(三个函数包+代码)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SOM自组织映射神经网络模型 的R语言实现 笔 ...

  5. Caused by: java.lang.ClassNotFoundException: org.springframework.expression.ExpressionParser

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  6. 三十天学不会TCP,UDP/IP网络编程 - 绅士的开始

    经过了过年的忙碌和年初的懈怠一切的日子,我又开始重新更新了~这是最新的一篇~完整版可以去gitbook(https://www.gitbook.com/@rogerzhu/)看到. 如果对和程序员有关 ...

  7. 在.Net Core中使用MongoDB的入门教程(二)

    在上一篇文章中,讲到了MongoDB在导入驱动.MongoDB的连接,数据的插入等. 在.Net Core中使用MongoDB的入门教程(一) 本篇文章将接着上篇文章进行介绍MongoDB在.Net ...

  8. .Net学习计划

    .Net培训 第一部分:.Net基础        .Net基础:数据类型.变量.运算符.分支结构.循环结构.方法.反编译器.递归.递归算法的非递归优化:        面向对象:异常.封装继承多态. ...

  9. OSS Android SDK

    Android SDK开发包(2014-12-20)  版本号0.2.2   开发包下载地址: http://oss.aliyuncs.com/aliyun_portal_storage/help/o ...

  10. 【BZOJ2134】单位错选(数学期望,动态规划)

    [BZOJ2134]单位错选(数学期望,动态规划) 题面 BZOJ 题解 单独考虑相邻的两道题目的概率就好了 没了呀.. #include<iostream> #include<cs ...