最近我在这里遇到了一段与此代码相似的代码
std::map<size_t,std::string> map{
#define RT_OK 0
{RT_OK,"No Error"},
#define RT_SIZE_MISMATCH 1
{RT_SIZE_MISMATCH,"Size Mismatch"}
};
在初始化列表内使用#define
。
我真的很惊讶它与GCC一起工作,而且似乎也与CLANG一起工作。无论如何,可以在初始化列表中使用#define
吗?
答案 0 :(得分:2)
将宏定义放在任何地方 2 是“确定” 1 。
预处理器指令被预处理器删除。编译器会看到类似的内容:
std::map<size_t,std::string> map{
// there was a PP directive here
{0,"No Error"},
// there was a PP directive here
{1,"Size Mismatch"}
};
1 从某种意义上说,程序是格式正确的。有时可能不正确,因为它可能会使其他程序员感到困惑。
2 受限制。伪指令前的同一行中不得有任何非空白标记,伪指令将持续到该行的末尾。