Pot*_*ter 5 c++ operator-precedence stringification c-preprocessor
一元运算符通常以比二元运算符更高的优先级进行解析,并且当从左到右扫描时,将首先找到前缀运算符。那么为什么 stringize ( #) 运算符的计算顺序相对于连接 ( ##) 运算符是未指定的呢?评估顺序是否意味着与 [cpp.stringize] \xc2\xa716.3.2 上下文中的优先级不同?
(预处理器没有副作用,因此从技术上讲,它没有评估顺序之类的东西。)
\n\n考虑到任何替代方案都会字符串化串联结果,而不是参数本身,文本“替换为包含相应参数的预处理标记序列的拼写的单个字符串文字预处理标记”的文本如何与其他优先级相匹配?
\n\n是否有任何实现做了一些有趣的事情,或者可以安全地删除评估文本的顺序并替换为“#运算符比运算符具有更高的优先级##”?
该问题已交叉发布到标准讨论邮件列表,但请更愿意在此处回复。
\n\n注意:我计划起草一份官方提案来修改这部分 C++ 规范,所以请分享您的知识!潜在的动机是使预处理器更具确定性。
\n