C++自学第六天--常量的定义

1、C++常量命名方式

请注意,把常量定义为大写字母形式,是一个很好的编程实践。

2、定义常量

在 C++ 中,有两种简单的定义常量的方式:
2.1、使用 #define 预处理器。
2.2、使用 const 关键字。

2.1、define 预处理器

下面是使用 #define 预处理器定义常量的形式:

#define identifier value

具体请看下面的实例:

#include <iostream>
using namespace std;
 
#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'
 
int main()
{
   int area;  
   area = LENGTH * WIDTH;
   cout << area; //输出结果为:50
   cout << NEWLINE;
   return 0;
}

注意:
预处理 #define 变量定义值以后,不能用分号,否则就会计算错误,但是程序不会报错。

#include <iostream>
using namespace std;

#define age0  12
#define age1 10

#define age2  12;
#define age3 10;

int main()
{
	int dd;
	dd = age0 + age1;
	cout << "值=" << dd << endl; //值=22
	dd = age2 + age3;
	cout << "值=" << dd << endl; //值=12
	return 0;
}

2.2、const 关键字

您可以使用 const 前缀声明指定类型的常量,如下所示:

  const type variable = value;

具体请看下面的实例:

#include <iostream>
using namespace std;

int main()
{
	const int  LENGTH = 10;
	const int  WIDTH = 5;
	const char NEWLINE = '\n';
	int area;

	area = LENGTH * WIDTH;
	cout << area;//输出结果为:50
	cout << NEWLINE;
	return 0;
}

3、宏定义 #define 和常量 const 的区别

3.1、类型不同
就定义常量说的话,
const 定义的常数是变量 也带类型
#define 定义的只是个常数 不带类型

3.2、起作用阶段不同
就起作用的阶段而言,#宏定义是一个"编译时"概念,在编译的预处理阶段起作用
而 const常量是一个"运行时"概念,const 是在编译、运行的时候起作用,在程序运行阶段使用,类似于一个只读行数据

3.3、存储方式不同
宏定义是直接替换,不会分配内存,存储与程序的代码段中,占用代码段空间
const常量需要进行内存分配,存储与程序的数据段中,占用数据段空间

#define PI 3.14     //预处理后 占用代码段空间
const float PI=3.14;    // 本质上还是一个 float变量,占用数据段空间

3.4、能否进行代码调试
从代码调试的方便程度而言,
#define 是不能进行调试的,因为在预编译阶段就已经替换掉了
而const 常量可以进行调试的,

3.5、定义域不同

void f1 ()
{
    #define N 12
    const int n 12;
}
void f2 ()
{
    cout<<N <<endl; //正确,N已经定义过,不受定义域限制
    cout<<n <<endl; //错误,n定义域只在f1函数中
}

3.6、定义后能否取消
宏定义可以通过#undef来使之前的宏定义失效
const常量定义后将在定义域内永久有效

void f1()
{
  #define N 12
  const int n = 12;

  #undef N //取消宏定义后,即使在f1函数中,N也无效了
  #define N 21//取消后可以重新定义
}

3.7、是否可以做函数参数
宏定义不能作为参数传递给函数
const常量可以在函数的参数列表中出现

大爱菜鸟教程这个网站,爱该网站的官方教程,也爱各前辈和大佬留下的学习笔记
菜鸟教程
博客园 狸猫酱 宏定义(#define)和常量(const)的区别

posted @ 2019-06-11 17:41  爱做梦的子浩  阅读(362)  评论(0编辑  收藏  举报