const和define的差别

Posted ybf-yyj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了const和define的差别相关的知识,希望对你有一定的参考价值。

1、const有什么用途?
(1)可以定义const常量
(2)const可以修饰函数的参数和返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防以外的变动,能提高程序的健壮性。

 

int main()
{
    const int j=42;
    const int k;//错误,未初始化
    extern const int j=100;//const对象被设定为仅在文件内有效,要在文件外使用,需要利用extern
    j+=1;//错误,j不能改变

    int i=2;
    int &r1=i;
    const int &r2=i;
    r1=0;
    r2=1;//错误,r2是一个常量引用
    cout<<i<< <<r1<< <<r2<<endl;//0 0 0,r1、r2绑定i,但是r2不能改变i的值。
    return 0;
}

 

 

 

2、const和define有什么差别?
C++可以用const定义常量,也可以用#define定义常量,但前者比后者有更多的优点:
(1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误(边际效应)。
(2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。在C++程序中只使用const常量而不是用宏常量,即const常量完全取代宏常量。

 

宏定义:

#include <iostream>
#include <cstdio>

#define SQR_1(x) (x*x);
#define SQR_2(x) ((x)*(x))

using namespace std;
int main()
{
    int a,b,c,d;
    b=d=3;
    a=SQR_1(b+2);
    cout<<a<<endl;
    c=SQR_2(d+2);
    cout<<c<<endl;
    return 0;
}

 

宏定义展开时容易造成二义性问题。a=SQR_1(b+2)展开后为b+2*b+2=11,c=SQR(d+2)展开后为(d+2)*(d+2)=25

 






以上是关于const和define的差别的主要内容,如果未能解决你的问题,请参考以下文章

php中const和define的区别

php define和const

在php中定义常量时,const与define的区别

15分钟弄懂 const 和 #define

const和define()的区别

宏(define)与常量(const) 和 枚举(enum)的使用