• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++ const修饰变量和修饰函数介绍

C++ const修饰变量和修饰函数介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++ const函数,c++ 函数声明 const,c++ const,c++ const用法,c++ const用法总结等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

const修饰变量

关于const最常见的一个面试题是这样的:char *const和const char*有什么区别,大家都知道const修饰符代表的是常量,即const修饰的变量一旦被初始化是不能被更改的,这两个类型一个代表的是指针不可变,一个代表指针指向内容不可变,但具体哪个对应哪个,很多人一直搞不清楚。

有这样一个规律,const修饰的是它前面所有的数据类型,如果const在最前面,那么把它和它后面第一个数据类行交换.比如上面的const char*交换之后就是char const *,这样一来就很清楚了,char *const p中的const修饰的是char *(注意,我们这里把char和*都算作一种类型,这时候const修饰的是char和*的组合,也就是字符串指针),是一个指针类型,所以这时候指针p是不能变的,比如下面这段代码就会报错
char str1[]="str1"; 
char str2[]="str2"; 
char *const p = str1; 
p = str2; 
</div>
这时候p是一个指针常量,它是不能指向别的地方的,但是它本身指向的内容是可以变的,比如下面的操作就是允许的
char str1[]="str1"; 
char *const p = str1; 
p[0] = 'X'; 
printf("%s", str1); 
</div>
这时候str1的值就变成了"Xtr1"
我们再来看const char *p,根据前面提到的规律,将const和它后面一个类型交换变成char const *p(其实这种写法也是允许的,只是人们习惯将const写在最前面),这时候const修饰的是char,也就是说p指向的字符内容是不能变的。将上面两个例子的char *const p全部改成const char *p,则结果正好相反,第一个可以编译通过,第二个会报错。

其它时候就很好区分了,比如const int ,const string等等,总之,const修饰的是什么类型,这个类型的变量就不能被改变。

const修饰函数

先来看这样一个函数
const char * func(const char *str) const;
</div>
这样的函数比较夸张,有三个const,我们从左到右来一一说明:

1、第一个const修饰的是返回值,前面已经说过,这里的const修饰的是char,也就是说返回值的内容是不能被更改的
2、第二个const和第一个是一样的,这种用的比较多,它作为函数参数,表示的是这个参数在函数体内是不能被改动的(被传进来的实参并不要求是const类型),这样做是为了防止函数对实参做一些意外的操作,你试想下,当你调用一个函数时,你传进去一个变量是"hello world!",调完函数之后变成了"fuck the world!",这实在是不可忍的,所以我们在设计函数的时候,如果传进来的参数只作为读取使用,最好是将参数设成const类型。很多公司在面试让写代码的时候都会看中这个细节,你注意了这个细节不一定说明你牛逼,但你若没注意那肯定是会减分的。
3、再来说第三个const,按照我们最开始说的规律,const修饰的是它前面的所有数据类型,这里它前面的所有数据类型组合起来就是一个函数,这种类型一般出现在类成员函数里,当然,这里并不是说这个函数是不能变的,它代表的时这个函数不能改变类的成员变量,不管是public的还是private的

我们下面举例主要说明第三种情况,来看这样一个简单的程序
#include<stdio.h> 
 
class A 
{ 
public: 
    A() : x(0), y(0){} 
    void func(const int p) 
    { 
        x = p; 
        y = p; 
    } 
    int getY() 
    { 
        return y; 
    } 
    int x; 
private: 
    int y; 
}; 
 
int main(int argc, char* argv[]) 
{ 
    A a; 
    printf("x:%d y:%d\n", a.x, a.getY()); 
    a.func(2); 
    printf("x:%d y:%d\n", a.x, a.getY()); 
    return 0; 
} 
</div>
这段代码是可以直接编译过的,运行结果是
x:0 y:0 
x:2 y:2 
</div>
我们稍作修改,将void func(const int p)改成void func(const int p) const再编译,就会直接报错,报错的两行代码是
x = p; 
y = p;
</div>
也就是说const类型的函数试图去修改类的成员变量是非法的,但是有一种情况例外,我们再在上面修改的基础上做一点修改,将int x改成mutable int x,将int y改成mutable int y,这时候程序又可以正常运行了,也就是说,如果成员变量是mutable类型的,它可以在任何场景下被修改。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ const引用、临时变量 引用参数详解
  • c++中临时变量不能作为非const的引用参数的方法
  • C和C++ const的声明差异
  • C++ const修饰变量和修饰函数介绍
  • C++实现动态分配const对象实例
  • C++常对象精讲_const关键字的用法
  • c++ const引用与非const引用介绍

相关文章

  • 2017-05-28浅析C语言中typeof关键字用法
  • 2017-05-28C++输入输出操作符重载的深入分析
  • 2017-05-28C语言中的函数指针学习笔记
  • 2017-05-28C语言实现双向链表
  • 2017-05-28华为面试题答案找出最大长度子字符串
  • 2017-05-28深入解析C++的WNDCLASS结构体及其在Windows中的应用
  • 2017-05-28C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结
  • 2017-05-28Win10中VC2013安装Unit test组件出现问题解决方案
  • 2017-05-28C语言实现程序开机自启动
  • 2017-05-28C++命名空间实例解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言中对于循环结构优化的一些入门级方法简介
    • 用c语言实现2000内既能被3整除又能被7整除的个数
    • 进程间通信之深入消息队列的详解
    • 详解C语言中getgid()函数和getegid()函数的区别
    • 使用Visual Studio 2010/2013编译V8引擎步骤分享
    • C语言在头文件中定义const变量详解
    • c++基础语法:构造函数与析构函数
    • VC小技巧汇总之对话框技巧
    • C和C++ const的声明差异
    • VC++中图像处理类CBitmap的用法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有