const真有点烦
在C++中const代替#define的操作,当定义一个const时必须附一个值给它:const int size = 100;通常C++编译器不为const创建存储空间,相反它把这个定义保存在符号表里。
常见const的几种定义区别:
- const int a; 或 int const a; a为常量不可更改。
- int const* c; 或const int * c; 修饰变量,指针指向的内容(值)不可变。
- int* const d; 修饰指针,指针指向的地址不可变。
- const int * const d;或int const * const d;指针的地址和内容均不可改变。
- 修饰函数参数:
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真有点烦的更多相关文章
- 多页应用 Webpack4 配置优化与踩坑记录
前言 最近新起了一个多页项目,之前都未使用 webpack4 ,于是准备上手实践一下.这篇文章主要就是一些配置介绍,对于正准备使用 webpack4 的同学,可以做一些参考. webpack4 相比之 ...
- [洛谷日报第39期]比STL还STL?——pbds
[洛谷日报第39期]比STL还STL?——pbds 洛谷科技 发布时间:18-08-3116:37 __gnu_pbds食用教程 引入 某P党:“你们C++的STL库真强(e)大(xin),好多数 ...
- Codeforces Round #594 (Div. 1)
Preface 这场CF真是细节多的爆炸,B,C,F都是大细节题,每道题都写了好久的说 CSP前的打的最后一场比赛了吧,瞬间凉意满满 希望CSP可以狗住冬令营啊(再狗不住真没了) A. Ivan th ...
- [NOIP10.4模拟赛]3.z题解--思维
题目链接: 咕咕 闲扯: 哈哈这道T3考场上又敲了5个namespace,300+行,有了前车之鉴还对拍过,本以为子任务分稳了 结果只有30分哈哈,明明用极限数据对拍过不知怎么回事最后数据又是读不全, ...
- 2次成功投诉EMS和中国移动的经验
上个月要找房子,搬家很多事情,真实头疼...搬家还把腰闪了....现在还有点痛.然后中间碰到 移动宽带 移机的事情,搞得我非常火.然后想起去年投诉EMS的事情,在事情处理完成后,我果断总结了下来,让大 ...
- Hao123这个流氓
Author:KillerLegend Date:2014.2.27 From:http://www.cnblogs.com/killerlegend/p/3572591.html Hao123真让人 ...
- 用Cython加速Python程序以及包装C程序简单测试
用Cython加速Python程序 我没有拼错,就是Cython,C+Python=Cython! 我们来看看Cython的威力,先运行下边的程序: import time def fib(n): i ...
- NOIP2017滚粗记
NOIP2017滚粗记 扯淡 考完联赛后一直在搞文化... 联赛过去了不知道多少天了才来写这东西.... Day0 早自习知道了要期中考试. 感觉心态炸裂了. 上午在乱敲板子.... 打了一堆莫名其妙 ...
- 【转】对 Rust 语言的分析
对 Rust 语言的分析 Rust 是一门最近比较热的语言,有很多人问过我对 Rust 的看法.由于我本人是一个语言专家,实现过几乎所有的语言特性,所以我不认为任何一种语言是新的.任何“新语言”对我来 ...
随机推荐
- js对象模型2
g
- viewpage+RadioButton+Fragment简单导航界面
https://blog.csdn.net/qibanxuehua/article/details/47333879
- Null项目参与排序
1.item1升序,item2升序,item3(存在NULL项目,NULL项目排在后面)升序 Collections.sort(list, Comparator.comparing(Bean::g ...
- stlink 下载报错:Error Flash Download failed - "Cortext-M0+"
stlink 下载报错:Error Flash Download failed - "Cortext-M0+" 解决方法: STM32 ST-LINK Utility 用这个软件把 ...
- 秋水逸冰实用Linux脚本收藏
秋水逸冰的脚本非常受欢迎,奈何其本人博客已经不能访问(目前是这样,不知道别的地区是否能访问),实际上GitHub上他本人一直在维护,因为某些原因不放出他本人的GitHub地址.截止到2019年12月1 ...
- Centos7下安装包方式安装MySQL
安装包下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar 第一步:在 /h ...
- css的网页布局案例
常见行布局: 导航使用position:fixed固定住 导航会脱离文档流,不占据空间 导致下面的元素上移,因此需要将下面的元素的padding-top设置成导航的高度 <!DOCTYPE ht ...
- Mac brew update 慢~~~
正题开始之前, 如果对 Homebrew 不太了解, 这里有一篇很好的介绍文章: macOS 包管理工具 Homebrew 不完全指南 花个几分钟读一下, 绝对超值! 正题 Homebrew 通过 G ...
- Qt读写文件
1.头文件 #include<QFile> #include<QFileDialog> #include<QDataStream> 2.写代码前工作 在ui界面拖入 ...
- SQL server安装时显示重启计算机失败问题解决办法
前几天在装SQL server2016的时候,一直显示重启计算机失败; 网上的方法也找来用了,但是重启完还是同样的问题,试了很多种方法,最后在一次测试中点关机的时候不小心点成了重启(win10有个毛病 ...