c++ const限定符

const限定符

  1. const对像一旦创建,其值就不能发生改变。const对象必须初始化

    const int i = get_size();//正确,运行时初始化。
    const int j = 1;//正确,编译时初始化。j = 2;//错误,j是一个常量,试图对其赋值行为将发生错误。
    const int err;//错误。
    
  2. 只能在const类型上执行不改变其内容的操作。

    int i = 1;
    const int ci = i;//正确,i的值拷贝给ci。
    int j = ci;//正确,ci的值拷贝给j
    
  3. 对常量的引用不能用作修改它所绑定的对象。

    const int ci = 1;
    const int &r1 = ci;//正确,引用及其对应的对象都是常量。r1 = 42;//错误,r1是对常量的引用,不能通过r1修改ci。
    int &r2 = ci;//错误,非常量引用不能指向常量对象。
    
  4. 允许为一个常量引用绑定一个非常量对象、字面值、一般表达式。

    int i = 1;
    const int &r1 = i;//正确,允许将const int&绑定到一个int对象上。
    const int &r2 = 2;//正确,r2是一个常量引用
    const int &r3 = r1*2;//正确,r3是一个常量引用int &r4 = r1*2;//错误,非常量引用不能指向常量对象。
    
  5. 对const的引用可能引用一个非const的对象,可以通过其他途径改变非const对象,但是不能通过const引用改变这个非const对象。

    int i =1;
    int &r1 = i;
    const int &r2 = i;
    r1 = 0;//正确,r1不是常量引用,i被修改为0。
    r2 = 0;//错误,r2是个常量引用,不能通过修改r2修改i对象。
    
  6. 指向常量的指针:不能用于改变其所指对象的值。只能用指向常量的指针存放常量对象的地址。

    const double pi =3.14;
    double *ptr = π//错误,普通指针不能指向常量对象
    const double *cptr = π//正确,常量指针cptr可以指向常量对象pi。
    *cptr = 1;//错误,不能通过常量指针修改其所指对象的值。
    
  7. 允许一个指向常量的指针指向一个非常量对象,指向常量的指针仅仅要求不能通过该指针改变对象的值,但没有规定那个对象的值不能通过其他途径改变。

    double k = 6.78;
    const double *pk = &k;//正确,但是不能通过pk改变k的值。
    
  8. const指针:

    指针是对象,因此允许把指针本身定义为常量,常量指针必须初始化,一旦初始化完成,他的值(存放在指针中的那个地址)就不能再改变了。不变的是指针本身的值,而非指向的那个对象的值。

    //*放在const前面,说明指针是一个常量。
    int i = 0;
    int *const val = &i;//val将一直指向i。
    const double pi = 3.14;
    const double *const pip = π//pip是一个指向常量对象的常量指针。
  9. 顶层const和底层const。

    指针本身是一个对象,它又可以指向另一个对象。

    顶层const(top-level const)表示指针本身是个常量。

    底层const(low-level const)表示指针所指对象是一个常量。

    更一般来说,顶层const表示任意的对象是常量。底层const则与指针和引用等复合类型的基本类型部分有关。

    int i = 0;
    int *const p1 = &i;//不能改变p1的值,顶层const
    const int ci = 42;//不能改变ci的值,顶层const
    const int *p2 = &ci;//允许改变p2的值,底层const

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 8.0 sinffer_jpcap 配置方法,问题解决,模拟sniffer程序。(附JAVA程序,jar,dll包等环境)...

一、 Eclipse环境下安装与配置Jpcap相关源程序、jpcap jar包,dll包,帮助文档。1、下载安装winpcap2、jpcap官方文件中lib包下,有两个文件,jpcap.dll和jpcap.jar。jpcap.dll-->JAVA安装路径/jre1.6.0_06/bin (JRE目录)jpcap.j…

c++ 参数传递

参数传递: 形参(parameter)和实参(argument): int num (int a, int b); int num (int a, int b){return ab; }//在函数的声明或者定义里,由由0个或多个形参组成的列表。int main(){int n1,m1;co…

c++定义成员函数

1.定义和声明成员函数的方式和普通函数差不多。成员函数的声明必须在类的内部,他的定义则即可以在类的内部也可以在类的外部。非成员函数的定义和声明都在类的外部。 struct Sales_data{std::string isbn() const { return bookNo; }double avg_price() const;std:…

java拖动图片拼图_求教,我的这个拼图程序中的移动图片的改怎么做

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼public class button extends JPanel implements MouseListener, ActionListener {/****/private static final long serialVersionUID 1L;private JButton[] button;private ImageIcon[] puzzlep;private JButton kbbutton;priva…

c++函数返回值是一个引用

函数返回值是一个引用的情况: 1.值是如何被返回的: 返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。 如果函数返回引用,则该引用仅是它所引对象的一个别名。 2.不能返回局部对象的引用或指针:…

java视频压缩 lz4_一种视频序列帧的压缩方法、解压方法及装置与流程

技术特征:1.一种视频序列帧的压缩方法,其特征在于,包括:在视频帧数据压缩时,对解析到的第一帧视频帧数据使用lz4算法进行压缩并保存至视频文件中;对之后解析到的每一帧视频帧数据都与之前一帧视频帧数据进行…

c++ 构造函数

构造函数: 类通过一个或几个特殊的成员函数来控制其对象的初始化进程,这些函数叫构造函数。构造函数的任务是初始化类对象的数据成员。 构造函数名字和类名相同,构造函数没有返回类型。构造函数也有一个可能为空的参数列表和一个可能为空的…

js java post提交_如何从Express.js发送Post请求到另一个服务器(Java)?

小编典典您正在重复请求,并为发布请求重新分配变量。我已经更新了您的代码并与requestb.in一起对其进行了测试var express require(express);var querystring require(querystring);var http require(http);var app express();app.get(/, function (req, res) {…

c++ 访问控制与封装

访问控制与封装 文章目录访问说明符:友元:封装好处:class Sales_data{public://作为接口的一部分,构造函数和部分成员函数isbn,combine紧跟在public说明符之后。Sales_data() default;Sales_data(const std::string &…

c++ 命名空间的using声明

命名空间的using声明: 除了内置类型之外,c语言还定义了一个内容丰富的抽象数据类型库。 访问库中名字的一个简单方法就是通过using。 我们用到的库函数基本上都属于命名空间std,可以通过::(作用域操作符)从左侧作用…

mysql工作中遇到的问题_MySQL工作中遇到的问题记录

1:log_slave_updates:从库1搭建级联从库2,从库1需要开启log_slave_updates,修改/etc/my.cnf,增加一行log_slave_updates1,重启数据库。http://blog.itpub.net/12679300/viewspace-1319263/2:ERROR 1418 (HY…

java 基本格式

java基本格式: 所有的java程序必须放在一个类之中才可以执行。 主方法main是整个java程序的入口,所有程序都是从public static void main(String[] args)开始运行的。 类定义有两种形式: public class:文件名和类名一致。每一个*.java文件…

用java画海绵宝宝_java 方法的重载

方法的重载:一个类中允许出现一个以上的同名方法,必须保证同名方法的参数列表不同好处:方便阅读,优化程序设计重载规则:重载方法名相同,但每个重载方法都必须有一个独一无二的参数类型列表,方法…

Java 构造方法

Java构造方法: 通过构造方法,在对象最初被创建时就完成对其成员变量的初始化。 构造方法特点: 构造方法名称和类名相同。构造方法不返回任何数据,也不用void声明。在创建对象时,系统自动调用类的构造方法。构造方法…

ajax 链接java_如何使用ajax将下拉菜单链接到表

以下是实现您的功能的示例静态代码 . 您可以使用sql和php添加动态内容 .的index.phpCource 1Cource 2Cource 3Cource 4$("#courses").change(function(){var course $(this).val();$.post(data.php, {course: course}, function(response){// your drop down box is…

Java 作用域修饰符

Java作用域修饰符 在java语言中,可以使用访问修饰符来规定对类、变量、方法和构造方法的访问。 文章目录一、访问修饰符二、非访问修饰符一、访问修饰符 1.私有的访问修饰符private: 声明为私有访问类型的变量只能通过类中的公共方法被外部类访问。 …

python xgboost实战_史上最详细的XGBoost实战

0. 环境介绍Python 版 本: 3.6.2操作系统  : Windows集成开发环境: PyCharm1. 安装Python环境安装Python首先,我们需要安装Python环境。本人选择的是64位版本的Python 3.6.2。去Python官网https://www.python.org/选择相应的版本…

java web导入tomcat_记一次在服务器上导入javaweb 项目的经历---tomcat服务器-Go语言中文社区...

1. 导入数据库远程linux服务器mysql数据库导入和导出.sql文件大部分情况本地开发环境为windows,部署的服务器为Linux,本地数据库导出.sql文件后需要远程导入服务器,具体如下。首先连接服务器,即服务器ip,协议&#xff…

Java 创建对象

Java 创建对象 声明:Person p1; 声明一个对象,包括对象名称(p1)和对象类型(Person)。 实例化:p1 new Person(); 使用关键字new创建一个对象。 声明和实例化连起来可以写成:Person …

java 2d绘图 stroke_Java标准教程:Java 2D绘图--第4章使用Text

Java标准教程:Java 2D绘图--第4章使用Text本节介绍文本API的用法,以及他们的渲染能力。至今为止,您已经有了基本的Java 2D文本API,同时知道如何设置字体和位置,以及绘制文本。本节扩展了这些知识,同时更深入…