面试题答案
一键面试- 作用域区别:
#define
定义的常量:- 没有作用域的概念,从定义处开始到文件结束都有效。如果在多个文件中使用
#define
定义常量,只要在使用前包含了定义该常量的头文件,它就会在整个工程中起作用,可能会导致命名冲突等问题。
- 没有作用域的概念,从定义处开始到文件结束都有效。如果在多个文件中使用
const
定义的常量:- 具有块作用域。如果在函数内部定义
const
常量,它只在该函数内部有效;如果在类中定义const
成员变量,它只在类的作用域内有效等。这有助于限制常量的作用范围,提高程序的安全性和可维护性。
- 具有块作用域。如果在函数内部定义
- 举例说明:
在上述代码中,#include <iostream> // 使用#define定义常量 #define PI 3.14159 int main() { // 在main函数中可以使用PI,因为从定义处到文件结束都有效 std::cout << "PI defined by #define: " << PI << std::endl; { // const定义的常量具有块作用域 const double e = 2.71828; std::cout << "e defined by const in inner block: " << e << std::endl; } // 这里不能使用e,因为e的作用域在上面的块内 // std::cout << e << std::endl; // 这行代码会报错 return 0; }
PI
是用#define
定义的,在main
函数中都可以使用。而e
是用const
在块内定义的,只在该块内有效,出了块就不能使用。