在C++中const代替#define的操作,当定义一个const时必须附一个值给它:const int size = 100;通常C++编译器不为const创建存储空间,相反它把这个定义保存在符号表里。

  常见const的几种定义区别:

  1. const int a; 或 int const a; a为常量不可更改。
  2. int const* c; 或const int * c; 修饰变量,指针指向的内容(值)不可变。
  3. int* const d; 修饰指针,指针指向的地址不可变。
  4. const int * const d;或int const * const d;指针的地址和内容均不可改变。
  5. 修饰函数参数:
 void(const int i)
{
I++;//错误
} //为了是理解更加直观应该在函数内部用const限定,避免调用者混淆。 void(int ic)
{
const int& I = ic;
I++;//错误
}

  6.返回const值

  对于内建类型来说,返回值是否是一个const,并不重要。例如

 int f()
{
return ;
} const int g()
{
return ;
} int main()
{
const int j = f();
int k = g();
} 都可以正常运行;

  7.传递和返回地址

 void t(int* i) { }

 void u(const int* cip)
{
*cip = ;//错误,指针指向的内容不可改变。
int i = *cip; //正确
int* ip2 = cip;//错误,Int* ip2没有const限制,
} const char* v()
{
return “result of fun”;
} const int* const w()
{
sataic int I;
return &I;
} int main()
{
int x =;
int* ip = &x;
const int* cip = &x;
t(ip); //正确
t(cip);//错误,不能被更改
u(ip); //正确
u(cip);//正确
char* cp = v();//错误
const char* cpp = v();//正确
int* ip2 = w();//错误
const int* cip2 = w();//正确
const int* const cip2 = w();//正确
}

  8.类中的const

  为了保证一个类对象为常量,const成员函数只能对于const对象调用。如果声明一个const类型的成员函数,则该成员函数可以被一个const对象所调用。一个没有被明确声明为const的成员函数被看成是将要修改对象中数据成员的函数,且编译器不允许被const对象所调用。定义const类型的成员函数不是const int func();这个只是表示函数的返回值为const,正确的const成员函数为int func() const;这个格式才表示函数为const类型,才能被const对象调用。

 class X

 {
int i;
public:
X(int ii);
int func() const;
}; X::X(int ii) :i(ii) { }
int X::func() const //关键字const必须同样出现在定义里,不然会认为不是一个函数
{
return I;
} int main()
{
X x1();
Const X x2();
X1.func();
X2.func();
//一个const成员函数可以被const对象和非const对象调用,但是成员函数并不会默认为const
//在使用中,不用于修改对象数据成员的任何函数都应该声明为const成员函数,这样它可以和const对象一起使用。 }

const真有点烦的更多相关文章

  1. 多页应用 Webpack4 配置优化与踩坑记录

    前言 最近新起了一个多页项目,之前都未使用 webpack4 ,于是准备上手实践一下.这篇文章主要就是一些配置介绍,对于正准备使用 webpack4 的同学,可以做一些参考. webpack4 相比之 ...

  2. [洛谷日报第39期]比STL还STL?——pbds

    [洛谷日报第39期]比STL还STL?——pbds   洛谷科技 发布时间:18-08-3116:37 __gnu_pbds食用教程 引入 某P党:“你们C++的STL库真强(e)大(xin),好多数 ...

  3. Codeforces Round #594 (Div. 1)

    Preface 这场CF真是细节多的爆炸,B,C,F都是大细节题,每道题都写了好久的说 CSP前的打的最后一场比赛了吧,瞬间凉意满满 希望CSP可以狗住冬令营啊(再狗不住真没了) A. Ivan th ...

  4. [NOIP10.4模拟赛]3.z题解--思维

    题目链接: 咕咕 闲扯: 哈哈这道T3考场上又敲了5个namespace,300+行,有了前车之鉴还对拍过,本以为子任务分稳了 结果只有30分哈哈,明明用极限数据对拍过不知怎么回事最后数据又是读不全, ...

  5. 2次成功投诉EMS和中国移动的经验

    上个月要找房子,搬家很多事情,真实头疼...搬家还把腰闪了....现在还有点痛.然后中间碰到 移动宽带 移机的事情,搞得我非常火.然后想起去年投诉EMS的事情,在事情处理完成后,我果断总结了下来,让大 ...

  6. Hao123这个流氓

    Author:KillerLegend Date:2014.2.27 From:http://www.cnblogs.com/killerlegend/p/3572591.html Hao123真让人 ...

  7. 用Cython加速Python程序以及包装C程序简单测试

    用Cython加速Python程序 我没有拼错,就是Cython,C+Python=Cython! 我们来看看Cython的威力,先运行下边的程序: import time def fib(n): i ...

  8. NOIP2017滚粗记

    NOIP2017滚粗记 扯淡 考完联赛后一直在搞文化... 联赛过去了不知道多少天了才来写这东西.... Day0 早自习知道了要期中考试. 感觉心态炸裂了. 上午在乱敲板子.... 打了一堆莫名其妙 ...

  9. 【转】对 Rust 语言的分析

    对 Rust 语言的分析 Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法.由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的.任何“新语言”对我来 ...

随机推荐

  1. Flink中逻辑计划和物理计划的概念划分和对应关系

    逻辑计划 logicGraph或者jobGraph,其端点为operator,edge为数据流向. operator往往代表一个函数. 同一个分区内的具有连续上下游关系的函数组成operator-ch ...

  2. 使用uftrace来debug应用程序

    谈uftrace之前,先谈谈ftrace. ftrace是一个用于调试linux内核的工具,它可以用于调试内核的调用栈,performance等. ftrace的核心是在编译内核代码时,通过制定-pg ...

  3. Ajax0002: 省市县三级联动案例

  4. linux文件、文件夹操作

    1. pwd   查看当前所在的路径 2. ls   显示文件列表 ls -l   显示文件列表以及详情 ls -la   显示所有文件列表以及详情(包含隐藏文件) 注意:ls -l 相当于ll 例如 ...

  5. workerman离线推送方案

    方案一:目前网上比较流行的 方案二:参考腾迅IM

  6. BUGFIX 09 - 记一次Java中String的split正则表达式匹配 - 引发`OutOfMemoryError: Java heap space`的oom异常 排查及解决 -Java根据指定分隔符分割字符串,忽略在引号里面的分隔符

    问题简述 说白了,Java根据指定分隔符分割字符串,忽略在引号(单引号和双引号)里面的分隔符; oom压测的时候,正则匹配"(?=(?:[^\"]*\"[^\" ...

  7. Python3标准库:heapq堆排序算法

    1. heapq堆排序算法 堆(heap)是一个树形数据结构,其中子节点与父节点有一种有序关系.二叉堆(binary heap)可以使用一个有组织的列表或数组表示,其中元素N的子元素位于2*N+1和2 ...

  8. jQuery---链式编程

    链式编程 设置性操作:可以链式编程 获取性操作,不能链式,因为获取性操作,数值,字符串,返回值是不是一个jq对象.   $(function () { //设置性操作:可以链式编程 //获取性操作,不 ...

  9. 如何安装selenium框架

    半年前因不满自己工作内容,便到处寻求资料,偶遇分享一套全套教程.开始学习python,后接触selenium有关内容. 前期因为配置环境花了些许时间,后来解决了,回想是如此简单 安装步骤 1.下载py ...

  10. vue.config.js添加路径别名

    在组件库中添加配置文件后其它文件需要引用它,此时想到利用路径的别名比较方便,相当于缩写了,请看下面的添加过程: (一)在vue.config.js文件中添加的内容如粗体字体所示: const path ...