C++基础---常量

1. 常量

1.1 常量的定义

  • 常量:常量是定以后,在程序运行中不能被改变的标识符
  • 常量:可以用#define const这两种方法定义;

    (1)#define PRICE 10      //定义常量10
    (2)const int price= 10;  //定义常量10

1.2 常量的意义:避免程序中出现的魔法数值

  • 魔法数值的程序示例:

    for (int i = 0; i < 10; i++) 
    {  
        cout<<i<<endl;
    }  
  • 定义常量的程序示例:

    
    #define COUNT 10   //定义常量10
    
    for (int i = 0; i < COUNT; i++) 
    {  
        cout<<i<<endl;
    }   
    或  
    const int count= 10;   //定义常量10
    for (int i = 0; i < count; ++i) 
    {  
        cout<<i<<endl;
    }  

    注:界限值10是什么,它具有什么含义?在代码中若直接使用类似10这些“魔数”(magic number),这些数字的具体含义就不能体现出来。另外,假如程序中多处包含10这个数,随着时间的推移,发现有些10需要更改为1000,有些10需要保持不变。这种情况下,程序员必须小心谨慎地去一个一个地查找程序中所有的10,并保证更改的数字不会出错——使用“魔数”会导致难以维护的问题。

1.3 #define与const的比较

  • #define宏常量:没有数据类型
    #define不涉及为定义的常量做类型检查;
    #define本质上是一个预处理器指令,它仅仅表示使用一个串代替别一个串而已,没有类型安全检查,且有时还会产生边际效应(不如你愿处);
  • const定义常量:有数据类型
    const会检查定义的常量类型;
    const定义的常量编译器可以对其进行数据静态类型安全检查;
  • #define与const的程序示例比较
    (1)#define宏常量的程序示例:

    
    #include <iostream> 
    
    using namespace std;
    
    #define N 100
    
    
    #define M 200 + N
    
    int main()
    {  
        cout<<"M      *N = "<<M*N<<endl;
        cout<<"200 + N*N = "<<200 + N*N<<endl;
        system("pause");
        return 0;
    }
    =>M      *N = 10200
      200 + N*N = 10200

    (2)const定义常量的程序示例:

    
    #include <iostream>
    
    using namespace std;
    const int N = 100;
    const int M = 200 + N;
    int main()
    {  
        cout<<"M        *N = "<<M*N<<endl;
        cout<<"(200 + N)*N = "<<(200 + N)*N<<endl;
        system("pause");
        return 0;
    }
    =>M        *N = 30000
      (200 + N)*N = 30000

    (3)const定义常量的程序示例:const检查定的类型

    
    #include <iostream>
    
    using namespace std;
    
    const float pi = 3.141592653;
    
    int main()
    {  
        cout<<"pi = "<<pi<<endl;
        system("pause");
        return 0;
    }
    =>pi = 3.14159

    注:const检查定的类型,如 const float pi = 3.141592653,实际的pi是3.141593,因为float类型的有效位限制。

1.4 const与#define相比有何优点

  • const定义常量:有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而#define只作简单的字符串替换,无类型安全检查。
  • const在编译时分配存储空间,而#define在预编译时编译,不分配存储空间。
  • 有些集成化的调试工具可以对const进行调试,但不能对宏进行调试。
    注:在C++中,并不提倡使用#define定义一个常量。

1.5 const与#define的作用域比较

  • 当定义局部变量时,const作用域仅限于定义局部变量的函数体内。
  • 但用#define时其作用域不仅限于定义局部变量的函数体内,而是从定义点到整个程序的结束点。但也可以用#undef取消其定义从而限定其作用域范围。(这是#define的优点)

参考文献:
[1]《C++全方位学习》范磊——第四章
[2]《C++程序设计教程(第二版)》钱能——第二章
[3]《C++Primer(中文版)》王刚 杨巨峰——第二章
[4] 百度搜索关键字:C++常量、魔法数值、const与#define的比较

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值