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

int main()
{
const int j=;
const int k;//错误,未初始化
extern const int j=;//const对象被设定为仅在文件内有效,要在文件外使用,需要利用extern
j+=;//错误,j不能改变 int i=;
int &r1=i;
const int &r2=i;
r1=;
r2=;//错误,r2是一个常量引用
cout<<i<<' '<<r1<<' '<<r2<<endl;//0 0 0,r1、r2绑定i,但是r2不能改变i的值。
return ;
}

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=;
a=SQR_1(b+);
cout<<a<<endl;
c=SQR_2(d+);
cout<<c<<endl;
return ;
}

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

最新文章

  1. day1学习
  2. Cotex-M3内核STM32F10XX系列时钟及其配置方法
  3. Linux-head,tail用法
  4. Swift对面向对象提供了良好的支持,下面介绍几个其独有的特性。
  5. php基础知识【函数】(2)文件file
  6. MVC查询数据接收及校验
  7. win10 uwp 获取指定的文件 AQS
  8. JAVA入门[13]-Spring装配Bean
  9. Java中把JSON和List结果集互转的代码片段整理
  10. 《java入门第一季》之面向对象面试题
  11. 基于vue cli 3.0创建前端项目并安装cube-ui
  12. CSS Modules入门教程
  13. 搭建Keil C51开发环境
  14. 2018.07.25 bzoj2125: 最短路(圆方树+倍增)
  15. C语言中文件目录(一正二反)斜杠
  16. springboot中的常用注解
  17. disable Nouveau kernel driver
  18. Mysql插入数据时,报错this is incompatible with sql_mode=only_full_group_by
  19. R类
  20. Oracle 删除表

热门文章

  1. IntellJ IDEA2017 springboot2.0.2中读取配置
  2. 爬虫技巧-西瓜视频MP4地址获取
  3. 王家林系列之scala--第69讲:Scala并发编程react、loop代码实战详解
  4. U盘或者移动银盘退出时一直显示占用中问题解决--最粗暴解决方式
  5. Python 7步机器学习
  6. hdu 5056 所有字母数都&lt;=k的子串数目
  7. hive函数 get_json_object的使用
  8. poj 2676 如何填满九宫格
  9. delphi 窗体自适应屏幕分辨率
  10. ubuntu下Node.js环境搭建