我正在解析一个复杂的语法,这需要我定义一个enum class像这样:
enum class NULLSTYLE {
NULL,
NOTNULL
};
Run Code Online (Sandbox Code Playgroud)
既然我可以使用0或者nullptr在C++ 11中,我可以以某种方式抑制或覆盖C++自己的定义,NULL以便我可以坚持我的语法吗?
NULL不是关键字.C++ 11 nullptr是.NULL是一个宏.如果你没有直接或间接地包含任何定义它的标题,那么理论上你可以将它用于任何事情.
但是,在实践中,这是不可能的,因为:
NULL由许多标准头部定义,并且头部可以(并且通常)间接地包括许多其他标准头部.您几乎不想编写一个枚举,以防止其客户使用标准库.
使用ALL_UPPERCASE用于非宏标识符通常被认为是不好的实践反正(例如参考).
您可以处理不使用nullptr但仍依赖的遗留代码NULL.
你可以#undef NULL,但这通常是一个可怕的黑客.你可以不再写这既需要您的枚举任何客户端代码,并在NULL宏观,更何况事实,即它会为每个人创造维护代码无休止的困惑.
Run Code Online (Sandbox Code Playgroud)enum class NULLSTYLE { NULL, NOTNULL };
这只是一个错误命名的情况.做到这样:
enum class NullStyle {
Null,
NotNull
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |