C,C ++编程语言中const和#define之间的区别

在本章中,我们将学习const数据成员,变量和定义宏。const和#define都用于处理源代码中的常量,但是它们之间几乎没有区别。

1)#define是预处理器指令,而const是关键字

#define用于定义一些带有名称(字符串)的值,此定义的字符串在C,C ++中被称为宏定义,而const是关键字或用于使标识符(即常数)的值恒定。

2)#define不是范围控制的,而const是范围控制的

通过包含相关的头文件,可以在程序或其他文件中的任何位置使用宏,因此宏不受作用域控制,但是可以在函数内部声明常量,因此只能在函数/作用域内对其进行访问。在其中声明了常量,因此,可以说const成员始终受范围控制。

使用const始终是一个好习惯。因为在使用const时我们可以控制其范围。如果将其放置在任何用户定义函数内部,则其效果将本地化到该函数;如果将其放置在所有用户定义函数外部,则它将对所有文件变为全局。

C ++示例,演示#define和const的用法

#include <iostream>
using namespace std;

//宏定义
#define X 30

//全局整数常量
const int Y = 10;

int main(){
	//本地ineteger常量`
	const  int Z = 30;
	
	cout<<"Value of X:  "<<X<<endl;
	cout<<"Value of Y:  "<<Y<<endl;
	cout<<"Value of Z:  "<<Z<<endl;  

	return 0;
}

输出结果

Value of X: 30 
Value of Y: 10 
Value of Z: 30

在上面的程序中,X是全局符号常量,但是在编译之前进行了预处理,Y是全局常量,而Z在主要函数中是局部的。

3)宏(#define)可以重新定义,但const不能

宏(已定义)可以在程序中的任何位置(通过未定义然后定义)重新定义,但是即使我们无法在常量中重新分配常量,也无法重新声明或重新定义常量。

C ++示例,重新定义定义的宏

#include <iostream>
using namespace std;

//宏定义
#define X 30

int main(){
	cout<<"Value of X: "<<X<<endl;
	#undef X
	#define X 300
	cout<<"Value of X: "<<X<<endl;

	return 0;
}

输出结果

Value of X: 30
Value of X: 300

在这里,您可以看到我们已经更改(重新定义)了X的值,并且它已经更改,程序成功执行并且值已更改。

C ++示例,重新定义(重新分配)内容-(ERROR)

#include <iostream>
using namespace std;

//常量int- 
const int Y=10;

int main(){
	cout<<"Value of Y: "<<Y<<endl;
	Y=100;	//错误,我们无法将值赋给const-
	cout<<"Value of Y: "<<Y<<endl;

	return 0;
}

输出结果

main.cpp: In function 'int main()': 
main.cpp:10:3: error: assignment of read-only variable 'Y'  
  Y=100; //错误,我们无法将值赋给const-  
   ^

在这里,您可以看到我们无法更改常量的值,在这里我们尝试更改Y的值,但是存在编译错误。