一、用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修饰符与函数的更多相关文章

  1. [Reprint]C++函数前和函数后加const修饰符区别

    c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...

  2. C++函数前和函数后加const修饰符区别

    class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...

  3. Delphi 中 函数参数中的 const 修饰符的本质以及注意事项

    来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------ ...

  4. C++ 成员函数前和函数后加const修饰符区别

    博客转载自: https://www.iteblog.com/archives/214.html 分析以下一段程序,阐述成员函数后缀const 和 成员函数前const 的作用 #include< ...

  5. 字符串输出输入函数,const修饰符,内存分区,动态内存管理,指针和函数,结构体

    1.字符串输出输入函数 读入字符串的方法: 1) scanf 特点:不能接收空格 2) gets 特点:可以接受含有空格的字符串 ,不安全 3) fgets(); 特点:可以帮我们自动根据数组的长度截 ...

  6. C++中 容易忽视的const 修饰符

    C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...

  7. [C++]const修饰符

    Date: 2014-1-1 Summary: const 修饰符笔记 Contents: 1.const 修饰符 声明一个常量数据类型 , 在编译时就确定数据类型 2.const 与 指针 一般情况 ...

  8. C/C++ 中 const 修饰符用法总结

    C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...

  9. [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结

    在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...

随机推荐

  1. 【转】MySQL理解索引、添加索引的原则

    索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销.而如果采取索引,则可以根据索引指向的页以及记录在 ...

  2. python +百度语音识别+图灵对话

    https://github.com/Dongvdong/python_Smartvoice 上电后,只要周围声音超过 2000,开始录音5S 录音上传百度识别,并返回结果文字输出 继续等待,周围声音 ...

  3. ROS教程3 ROS自定义msg类型及使用

    1ROS自定义msg类型及使用 http://blog.csdn.net/u013453604/article/details/72903398 首先创建一个空的package单独存放msg类型(当然 ...

  4. 华为交换机常用命令(以s5700-SI为例)

    交换机的三种模式: Access模式: 一般用来连接计算机与交换机. 此模式下有一个PVID就是本端口所属的VLAN号,如果从链路上收到无标签的帧,则打上默认VLAN号,然后发给其他端口,如果从链路上 ...

  5. 使用cmd导出mysql数据到excel

    windows环境 (有时候复制的不好使,最好可以手动输入一次试试) 1.windows + R 输入cmd弹出命令框 2.cd  C:\Program Files\MySQL\MySQL Serve ...

  6. django_redis作为 session backend 使用配置

    Django 默认可以使用任何 cache backend 作为 session backend, 将 django-redis 作为 session 储存后端不用安装任何额外的 backend # ...

  7. RabbitMq、ActiveMq、ZeroMq、kafka之间的比较

    MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部 ...

  8. 如何在Skyline中加载ArcGISServer发布的WMS和WMTS服务

    如何在Skyline中加载ArcGISServer发布的WMS和WMTS服务? 我这里的测试环境是ArcGISServer10.1和TerraExplorer Pro7.0,主要过程截图如下,

  9. [Spark][Python]Spark Python 索引页

    Spark Python 索引页 为了查找方便,建立此页 === RDD 基本操作: [Spark][Python]groupByKey例子

  10. PowerBI开发 第十五篇:DAX 表达式(时间+过滤+关系)

    DAX表达式中包含时间关系(Time Intelligence)相关的函数,用于对日期维度进行累加.同比和环比等分析.PowerBI能够创建关系,通过过滤器来对影响计算的上下文. 一,时间关系 DAX ...