zoukankan      html  css  js  c++  java
  • 读书笔记:C++ Primer系列(4)—— 关于const限定符

    题记:

         请看下面一段程序:

         for(int k=0;k!=100;k++)

         {

           ..........

         }

    出现两个问题:

    • 程序的可读性;
    • 程序的可维护性;

    首先,比较k与100有什么意义?为什么要跟100比较?100哪里来的?——100就像魔术般凭空冒出来一样,程这样的数为魔数(即:它的意义在上下文中没有体现出来)。

    这样一来,导致程序的可读性比较差;

    其次,如果此整个程序规模较大,100出现的次数上千上万次,假设要对其做修改,这样修改量绝对大啊!并且很容易出错,导致程序崩溃。这样一来,导致程序的可维护性较差。

    解决这两个问题的方法是使用一个初始化为100的对象,即:

         int max=100;

         for(int k=0;k!=max;k++)

         {

           ..........

         }

    这样,通过对象名称友好性解决了可读性差的问题;要作修改只需要修改max的值就可以,增强了程序的可维护性。

    4.1 const限定符

    从上面可以看出,通过定义一个变量来代表一个常数,这样会造成这个常数会被意外修改,而const关键字可以解决这样的问题。

    • const可以把一个对象转换成一个常量,如:

             const int max=100;//定义max为常量并初始化为100,且max在随后不可更改

    注:由于常量是不可更改的,定义时必须被初始化。  

             const int i,j=100;//编译时出错,因为常量i未被初始化

    • 在全局作用域中声明的const变量是该对象在该文件下的局部变量,只能被该文件使用,而不能被该程序的其他文件使用

    注:

    1. 在全局作用域中声明的非const变量,可以被该程序的所有文件使用;
    2. 要使在全局作用域中声明的const变量被该程序的所有文件使用,可以指定const变量为extern。(即:非const变量默认为extern)

    4.2 引用

    牢记一点:引用就是对象的别名(俗称:小名),对引用的操作就是对对象的实际操作

    如:

    int res=5;

    int &RRres=res;//这里定义了RRres是对象res的引用

    注:引用必须初始化

    如果有操作:RRres+=3;则有RRres的值为8,且res的值也为8

    关于const引用

    • 非const引用只能绑定到与该引用同类型的对象;
    • const引用可以绑定到不同但相关的类型的对象或绑定到右值

    如:

    int temp=4;

    int &temp1=8;//错误非const不能绑定到右值,只能绑定到同类型的对象

    const int &temp2=8;//正确

    const int &temp3=temp+temp3;//正确

  • 相关阅读:
    C#调试信息打印到输出窗口
    C#拼接SQL中in条件
    从图像到知识:深度神经网络实现图像理解的原理解析
    Cocoa Touch(六):App运行机制 NSRunLoop, KVC, KVO, Notification, ARC
    Cocoa Touch(五):网络请求 NSURLSession/AFNetworking, GCD, NSURLResquest
    JQuery:选择器、动画、AJAX请求
    Cocoa Touch(四): 多线程GCD, NSObject, NSThread, NSOperationQueue
    Socket、RPC通信实例,简单版本,仅供查阅
    Cocoa Touch(三):图形界面UIKit、Core Animation、Core Graphics
    Cocoa Touch(二):数据存储CoreData, NSKeyArchiver, NSOutputStream, NSUserDefaults
  • 原文地址:https://www.cnblogs.com/kkdd-2013/p/3481207.html
Copyright © 2011-2022 走看看