因此,我使用预处理器宏NDEBUG为我的调试生成启用一些检查。但是我想用C++常量替换它,以便在noexept子句和static if中使用它。我知道我也许能做到这样:
// in constants.hpp
#ifdef NDEBUG
constexpr bool ndebug = true;
#else
constexpr bool ndebug = false;
#endif但是使用NDEBUG,您可以向编译器提供-D NDEBUG标志,但是对于某些文件,您可以手动指定#undef NDEBUG。因此,部分代码将使用NDEBUG编译,而部分将在没有它的情况下编译。因此,即使在一个翻译单元中,也会有具有定义的NDEBUG的部分和没有它的部分。
是否可以使用C++方法设计出完全符合此行为的内容,以便在每个头文件中都有基于NDEBUG的值的编译时bool常量。
当然,您可以在每个文件中创建具有不同名称的常量,如果这是唯一的方法,您至少可以在某种程度上自动化这一点吗?
发布于 2021-11-24 09:30:35
如果使用变量或函数,如果将文件与NDEBUG定义的文件或未与这些变量/函数混合使用,则可能会发生ODR冲突。
不过,您可以声明一个具有匹配NDEBUG存在值的宏。
#ifdef NDEBUG
# define NDEBUG_VALUE true
#else
# define NDEBUG_VALUE false
#endif在noexept子句和静态if中使用它
但仍然值得关注,因为ODR违规行为可能会很快发生。
所有定义都应相同。
https://stackoverflow.com/questions/70092277
复制相似问题