作用域区别
define
宏定义:
define
宏定义没有作用域的概念。它是在预处理阶段进行简单的文本替换,一旦定义,在整个源文件(从定义处到文件结束,除非用#undef
取消定义)都有效。
- 例如:
#include <iostream>
#define PI 3.14159
int main() {
double radius = 5.0;
double area = PI * radius * radius;
std::cout << "圆的面积: " << area << std::endl;
return 0;
}
- 在这个例子中,
PI
宏定义在main
函数之前,它在main
函数内可以直接使用,因为宏定义没有局部或全局作用域之分,只要在它定义之后的代码都可以使用。
const
常量:
const
常量有严格的作用域规则。如果const
常量定义在函数内部,它具有局部作用域,只在该函数内有效;如果定义在函数外部(全局作用域),则在整个源文件内有效(如果想在多个源文件中共享const
常量,需要使用extern
关键字)。
- 例如:
#include <iostream>
const double globalPI = 3.14159;
int main() {
const double localPI = 3.14;
double radius = 5.0;
double area1 = globalPI * radius * radius;
double area2 = localPI * radius * radius;
std::cout << "使用全局const常量计算的圆面积: " << area1 << std::endl;
std::cout << "使用局部const常量计算的圆面积: " << area2 << std::endl;
// 以下代码会报错,因为localPI作用域在main函数内
// double newArea = localPI * 2;
return 0;
}
- 在上述代码中,
globalPI
定义在全局作用域,在main
函数内可以使用。localPI
定义在main
函数内部,具有局部作用域,在main
函数外不能使用。