正如问题所述,我知道在C ++ 17中会有名称空间和枚举器的属性。这将如何影响我们的代码?这些属性是什么以及它们允许我们做什么?我找不到任何理解这个新功能的好资源。
答案 0 :(得分:12)
目前,如果您要折旧特定的枚举值,则需要依赖编译器扩展。例如,在clang中,您可以通过以下方式指定已弃用的枚举值:
enum OperationMode {
OM_Invalid,
OM_Normal,
OM_Terrified __attribute__((deprecated)),
OM_AbortOnError __attribute__((deprecated)) = 4
};
一旦枚举和命名空间支持属性,就会有一种实现类似功能的标准交叉编译方式:
enum OperationMode {
OM_Invalid,
OM_Normal,
OM_Terrified [[deprecated("re-named to invalid")]],
OM_AbortOnError [[deprecated("exceptions are used instead")]] = 4
};
其他属性可能有一天会发现与名称空间和枚举值的相关性,但正如提案作者所述:
本文建议通过允许属性来解决这些问题 在枚举器和命名空间上指定,并扩展 [[deprecated]]属性,应用于这些实体,与最初一样 意图。