MST

星途 面试题库

面试题:C++ 中define和const在类型检查及内存分配上的差异

在C++ 编程环境下,分析define和const在类型检查机制上的不同,以及它们在内存分配方式上存在哪些差异,结合具体代码说明。
23.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

类型检查机制不同

  1. define
    • define是预处理指令,在预处理阶段进行文本替换,不进行类型检查。
    • 例如:
    #define PI 3.14159
    // 下面代码在预处理后变为 int r = 3.14159; 编译会报错,但define本身不检查类型
    int r = PI; 
    
  2. const
    • const定义的常量是有类型的,在编译阶段进行类型检查。
    • 例如:
    const double PI = 3.14159;
    int r = PI; // 编译报错,因为类型不匹配,const常量有类型检查
    

内存分配方式差异

  1. define
    • 由于是文本替换,不会为其分配内存。
    • 例如:
    #define MAX_SIZE 100
    int arr[MAX_SIZE]; // 预处理后变为 int arr[100]; 不会为MAX_SIZE分配内存
    
  2. const
    • 对于局部const变量,存储在栈区。
    • 例如:
    void func() {
        const int num = 10; // num存储在栈区
    }
    
    • 对于全局const变量,存储在只读数据段(常量区)。
    • 例如:
    const int global_num = 20; // global_num存储在只读数据段
    int main() {
        return 0;
    }