在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. js对象模型2

    g

  2. viewpage+RadioButton+Fragment简单导航界面

    https://blog.csdn.net/qibanxuehua/article/details/47333879

  3. Null项目参与排序

    1.item1升序,item2升序,item3(存在NULL项目,NULL项目排在后面)升序   Collections.sort(list, Comparator.comparing(Bean::g ...

  4. stlink 下载报错:Error Flash Download failed - "Cortext-M0+"

    stlink 下载报错:Error Flash Download failed - "Cortext-M0+" 解决方法: STM32 ST-LINK Utility 用这个软件把 ...

  5. 秋水逸冰实用Linux脚本收藏

    秋水逸冰的脚本非常受欢迎,奈何其本人博客已经不能访问(目前是这样,不知道别的地区是否能访问),实际上GitHub上他本人一直在维护,因为某些原因不放出他本人的GitHub地址.截止到2019年12月1 ...

  6. Centos7下安装包方式安装MySQL

    安装包下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar 第一步:在 /h ...

  7. css的网页布局案例

    常见行布局: 导航使用position:fixed固定住 导航会脱离文档流,不占据空间 导致下面的元素上移,因此需要将下面的元素的padding-top设置成导航的高度 <!DOCTYPE ht ...

  8. Mac brew update 慢~~~

    正题开始之前, 如果对 Homebrew 不太了解, 这里有一篇很好的介绍文章: macOS 包管理工具 Homebrew 不完全指南 花个几分钟读一下, 绝对超值! 正题 Homebrew 通过 G ...

  9. Qt读写文件

    1.头文件 #include<QFile> #include<QFileDialog> #include<QDataStream> 2.写代码前工作 在ui界面拖入 ...

  10. SQL server安装时显示重启计算机失败问题解决办法

    前几天在装SQL server2016的时候,一直显示重启计算机失败; 网上的方法也找来用了,但是重启完还是同样的问题,试了很多种方法,最后在一次测试中点关机的时候不小心点成了重启(win10有个毛病 ...