qdi*_*dii 12 c++ standards keyword c-preprocessor
在本周大师的这篇文章中,有人说:It is illegal to #define a reserved word.这是真的吗?我找不到常规,我已经看过程序员重新定义新的,例如.
Alo*_*ave 19
17.4.3.1.1宏名[lib.macro.names]
1如果转换单元包含标题,则每个在标题中定义为宏的名称将保留给实现用于任何用途.16)
包含标题的转换单元不应包含定义在该标题中声明或定义的名称的任何宏.这样的翻译单元也不应该为与关键字词汇相同的名称定义宏.
顺便说一下,new是一个操作员,它可以由用户通过提供自己的版本来重载(替换).
Jos*_*eld 11
C++ 11中的相应部分:
17.6.4.3.1宏名[macro.names]
1包含标准库头的转换单元不得在任何标准库头中声明#define或#undef名称.
2翻译单元不得#define或#undef名称与关键字词汇相同.
C++ 03的第1段已被删除.第二段分为两部分.现在,上半部分已经更改为具体说明它仅适用于标准标题.第二点已经扩展到包括任何翻译单元,而不仅仅是包含标题的翻译单元.
但是,标准的此部分概述(17.6.4.1 [constraints.overview])指出:
本节介绍对使用C++标准库功能的C++程序的限制.
因此,如果您没有使用C++标准库,那么您可以按照自己的意愿行事.
因此,要在C++ 11的上下文中回答您的问题:如果您使用的是C++标准库,则无法在任何翻译单元中定义(或取消定义)与关键字相同的任何名称.