const修饰符与函数
一、用const修饰函数的参数##
函数参数类型前加const指明该参数为常量,在函数内部不可改变。
void func(const int x) {
//x不可以在内部进行赋值等操作.
}
注:当参数为引用传递或者指针传递作为输出时,都不能加const
二、用const修饰函数的返回值##
函数返回时,会把返回值复制到外部临时的存储单元中,存储类型由函数的返回类型来确定。
- “值传递”加const修饰没有任何价值。
- ”址传递”加const修饰,函数返回值只能被赋给加const修饰的同类型指针,或者利用const_case转化为去const的常量。
const int* func(void) //函数声明
...
int* a = func(); //报错
int* c = const_cast<int*>(func()); //正确
const int* b = func() //正确
- "引用返回",引用即为const指针,函数返回引用并加const限定后,函数返回的是地址与地址所存的值都被const修饰的指针,存于临时的外部存储单元中,
const int& func(); //函数声明
...
int b = func(); //正确,从外部存储单元中赋值给变量
int& c = func(); //错误,试图在同一个地址中即存储变量又存储常量
int& d = const_cast<int&>(func()); //正确,去const
const int& e = func(); //正确
如果上面错误的例子看不懂可以看之前的const修饰符限定的常量指针const与non-const赋值部分。
引用返回总结
引用返回一般很少用,但既然选择引用返回,返回的肯定是一个作用域高于函数作用域的变量的引用,毕竟函数作用域下的变量在函数结束后会释放掉(static这里不考虑)引用即为该变量的const指针,既然选择返回指针,就想通过直接利用指针修改该地址下的变量,所以就更没有必要返回const引用,毕竟const引用的返回值不希望对地址所存的值进行修改。引用返回更常用的方式是:
int& func();
...
int& a = func();
这一可以通过a来改变返回值。
三、const 成员函数##
任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误。
class test
{
public:
void func(){}
int getNum(void) const // const 成员函数
{
++num; // 编译错误,企图修改数据成员m_num
func(); // 编译错误,企图调用非const函数
return num;
}
private:
int num;
};
const修饰符与函数的更多相关文章
- [Reprint]C++函数前和函数后加const修饰符区别
c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...
- C++函数前和函数后加const修饰符区别
class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...
- Delphi 中 函数参数中的 const 修饰符的本质以及注意事项
来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------ ...
- C++ 成员函数前和函数后加const修饰符区别
博客转载自: https://www.iteblog.com/archives/214.html 分析以下一段程序,阐述成员函数后缀const 和 成员函数前const 的作用 #include< ...
- 字符串输出输入函数,const修饰符,内存分区,动态内存管理,指针和函数,结构体
1.字符串输出输入函数 读入字符串的方法: 1) scanf 特点:不能接收空格 2) gets 特点:可以接受含有空格的字符串 ,不安全 3) fgets(); 特点:可以帮我们自动根据数组的长度截 ...
- C++中 容易忽视的const 修饰符
C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...
- [C++]const修饰符
Date: 2014-1-1 Summary: const 修饰符笔记 Contents: 1.const 修饰符 声明一个常量数据类型 , 在编译时就确定数据类型 2.const 与 指针 一般情况 ...
- C/C++ 中 const 修饰符用法总结
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...
- [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结
在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...
随机推荐
- linux 报错Mysql.pid 文件不存在导致service Mysqld start 失败
Mysql.pid 文件不存在导致service Mysqld start 失败 1. 到提示报错的mysql.pid 不存在的目录下 使用 touch 命令创建mysql.pid文件. t ...
- keystore密钥文件使用的算法-PBKDF2WithHmacSHA1 和Scrypt
PBKDF2 简单而言就是将salted hash进行多次重复计算,这个次数是可选择的.如果计算一次所需要的时间是1微秒,那么计算1百万次就需要1秒钟.假如攻击一个密码所需的rainbow table ...
- Java内存分配之堆、栈和常量池(转)
摘录自http://www.cnblogs.com/SaraMoring/p/5687466.html Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类 ...
- nginx的server块如何支持php
直接贴代码,备份用 server { listen ; server_name abc.com; index index.html index.htm index.php; root /var/www ...
- CVE-2018-14424 use-after-free of disposed transient displays 分析报告
漏洞描述 GDM守护进程不能正确的取消导出在D-Bus 接口上已经被销毁的display对象,这造成本地用户可以触发UAF,从而使系统崩溃或造成任意代码执行. 调试环境 gdm版本: 3.14.2(通 ...
- Intel CPU 漏洞分析
Intel CPU漏洞分析报告 预备知识 存储分级 由于计算机存储分级的特性(第一级:寄存器,第二级:高速缓存,第三级:内存,第四级:磁盘),每一级之间的访问速度差距高达数量级.所以处理器会将用到的数 ...
- Python-2.7 : 编码问题及encode与decode
普通的字符串在py2.7中都是以ASCII编码的,例如str=“abc”,若含有中文则会以gbk或者gb2312编码(GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;GBK 是 GB ...
- 广告牌LED灯阵
大家都知道广告牌里面原来都是灯管,现在开始更换成LED灯了,下面是我在现场拍的图片: 下面这个图片是LED灯条,铝基板打印电路,TM1812驱动,该IC可以接受4组24位数据,然后转发数据(https ...
- 【Codeforces Round 1114】Codeforces #538 (Div. 2)
Codeforces Round 1114 这场比赛做了\(A\).\(C\).\(D\).\(E\),排名\(134\). \(B\)题做了很长时间,好不容易最后一分钟\(Pretest\ Pass ...
- linux中断源码分析 - 中断发生(三)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 回顾 上篇文章linux中断源码分析 - 初始化(二)已经描述了中断描述符表和中断描述符数组的初始化,由于在初始 ...