本文介绍了它是未定义的行为#define /#undef一个具有特殊意义的标识符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 禁用在gcc中覆盖的检查的问题的答案建议使用 -Doverride = ,以禁用错误使用覆盖的错误>,它实际上与添加相同: #define override pre> 到源文件。 我的初步反应是,这看起来像未定义的行为,因为我们重新定义关键字,但是查看草稿C ++ 11标准部分 2.12 关键字[lex.key] 我惊讶的是, / em>或 final 都是关键字。它们在上一节 2.11 [lex.name] 中有说明,它们是具有特殊含义的标识符: ... 和表3 标记为具有特殊含义的标识符,包括覆盖和 问题是,它是未定义的行为,重新定义(使用#define ) / em>? 解决方案如果您使用的是C ++标准库是未定义的行为以重新定义具有特殊含义的标识符,这也适用于关键字。根据 17.6.4 [constraints] 下的C ++ 11标准草案,我们有 17.6.4.1 [constraints.overview] 这说明:和 17.6。 4 我们有 17.6.4.3.1 [macro.names] 部分:and Table 3 is labelled Identifiers with special meaning and includes both override and final.The question is, is it undefined behavior to redefine(using #define) identifiers with special meaning? Are they treated any differently than keywords in this respect? 解决方案 If you are using the C++ standard library it is undefined behavior to redefine identifiers with special meaning, this also applies to keywords. From the draft C++11 standard under section 17.6.4 [constraints] we have section 17.6.4.1 [constraints.overview] which says:and under 17.6.4 we have section 17.6.4.3.1 [macro.names] which says:Table 3 list the Identifiers with special meaning. We can see this paragraph also covers keywords and they are treated in the same manner. 这篇关于它是未定义的行为#define /#undef一个具有特殊意义的标识符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-21 09:16