【问题标题】:define BOOST_PP_NODE_13(p) BOOST_PP_IIF(p##(13), 13, 14) [closed]定义 BOOST_PP_NODE_13(p) BOOST_PP_IIF(p##(13), 13, 14) [关闭] 【发布时间】:2016-09-19 18:47:23 【问题描述】: 提升 auto_rec.hpp 这里的 p##(13) 是什么意思: 定义 BOOST_PP_NODE_13(p) BOOST_PP_IIF(p##(13), 13, 14) 翻译成什么? 【问题讨论】: 标签: c++ boost macros 【解决方案1】: '##' 预处理运算符用于进行连接。见Macros。 它的作用是从操作员双方获取令牌并生成一个令牌。 这是一个经典的用法: #define foo(x, y) x ## y foo(aa, bb) // expands to 'aabb' 在您的情况下,## 没有用,因为 p 和 (13) 不需要连接以扩展为有效表达式。 有趣的是,## 在最新版本的boost 中消失了。 此外,clang 似乎不喜欢带括号的##,因为它试图将 'p(' 粘贴为自己的无效标记,这会导致编译器错误。 【讨论】: 是的。谢谢。我知道这一点。我确实以错误的方式问了一个问题。对不起。