(1)宏定义常量#define
优点:
1.简单直接:宏定义是一种简单的文本替换机制,在预处理阶段,编译器会将代码中所有出现的宏名替换为对应的常量值,不涉及类型检查等复杂操作,使用起来非常方便。
2.不受作用域限制:宏定义每一作用域的概念,一旦定义,在整个文件甚至整个项目中都可以使用,除非使用#undef取消定义。
缺点:
1.缺乏类型检测:宏只是简单的文本替换,不会进行类型检查,这可能会道之一些难以发现的错误
2.调试困难:由于宏在预处理阶段就被替换,调试时无法看到宏名,只能看到替换后的文本,这给调试带来了一定的困难。
3.可能导致代码膨胀:如果宏被大量使用,会导致代码中出现大量重复的文本,增加代码的体积。
(2)const关键字定义常量
优点:
1.类型安全:const定义的常量具有明确的类型,编译器会进行类型检查,避免了一些潜在的错误。
2.具有作用域:const常量遵循作用域规则,可以在不同作用域中定义同名常量,提高了代码灵活性和可维护性。
3.便于调试时可以看到常量名,方便定位问题。
缺点:
1.定义相对复杂:相比于宏定义,const定义需要指定类型,相对繁琐一些。
(3)使用场景:
1.使用宏定义的场景:
当需要定义简单常量,且对类型检查要求不高时,可以使用宏定义。
2.使用const定义的场景:
当需要定义具有明确类型的常量,并且要求类型安全时,应用const关键字。
在类中定义成员时,只能使用const关键字。