使用静态const变量比使用#define preprocessor更好吗?或者这取决于上下文?

每种方法的优点/缺点是什么?


当前回答

静态const是有类型的(它有类型),可以由编译器检查有效性、重定义等。 #define可以被重新定义为undefined。

通常你应该更喜欢静态常量。它没有缺点。预处理程序应该主要用于条件编译(有时可能用于非常脏的trics)。

其他回答

静态const是有类型的(它有类型),可以由编译器检查有效性、重定义等。 #define可以被重新定义为undefined。

通常你应该更喜欢静态常量。它没有缺点。预处理程序应该主要用于条件编译(有时可能用于非常脏的trics)。

如果要定义一个在类的所有实例之间共享的常量,请使用static const。如果常量特定于每个实例,则只需使用const(但请注意,该类的所有构造函数都必须在初始化列表中初始化这个const成员变量)。

请看这里:static const vs define

通常使用const声明(注意它不需要是静态的)

使用预处理器指令#define定义常量不仅不建议应用在c++中,也不建议应用在C中。甚至在C语言中,也有人建议用const表示常量。

使用静态const就像在代码中使用任何其他const变量一样。这意味着您可以跟踪信息的来源,而不是在预编译过程中简单地在代码中替换#define。

对于这个问题,你可能想看看c++ FAQ Lite: http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.7