我正在解析一个复杂的语法,要求我像这样定义一个enum class
:
enum class NULLSTYLE {
NULL,
NOTNULL
};
由于我可以在C ++ 11中使用0
或nullptr
,我能以某种方式抑制或覆盖C ++自己对NULL
的定义,以便我可能坚持我的语法?
答案 0 :(得分:6)
NULL
不是关键字。 C ++ 11的nullptr
是。 NULL
is a macro.如果你没有直接或间接地包含任何定义它的标题,那么理论上你可以将它用于任何事情。
然而,在实践中,这是不可能的,因为:
NULL
由许多标准标头定义,标头可以(通常也会)间接包含许多其他标准标头。您几乎不想编写一个枚举,以防止其客户使用标准库。
使用ALL_UPPERCASE
作为非宏标识符通常被视为不良做法(example reference)。
您可以处理不使用nullptr
但仍依赖NULL
的遗留代码。
你可以#undef NULL
,但这通常是一个可怕的黑客。您再也无法编写任何需要枚举和 NULL
宏的客户端代码,更不用说它会为每个维护代码的人造成无穷无尽的混乱。
enum class NULLSTYLE { NULL, NOTNULL };
这只是一个错误命名的情况。做到这样:
enum class NullStyle {
Null,
NotNull
};