gpt4 book ai didi

c++ - 哈希标记 (#) 在对象宏扩展列表中有什么作用?

转载 作者:行者123 更新时间:2023-11-30 03:13:23 26 4
gpt4 key购买 nike

我一直在努力理解 C++14 标准早期草案中对 C++ 预处理器中宏扩展的描述。 (这是我可以免费获得的版本,我怀疑预处理器自那以后发生了很大变化。)

草案给出了一个例子:

#define hash_hash # ## #

并显示它扩展为 ##。我已经验证 g++ 有这种行为。但是我在标准的实际规范文本中找不到对此的解释,它解释了在函数宏中的参数名称之前将相应的参数字符串化(我理解得很好)但没有说明它在任何其他方面的含义上下文。

看到这个我更疑惑了

#define pound #

展开为#,完全符合我最初的预期。

最佳答案

该示例向您展示了如何“转义”宏中的两个散列序列。它采用第一个和最后一个散列并使用中间的双散列连接它们,当在另一个宏中使用时将双散列序列放在输出上。没有其他方法可以在宏中间写入双散列,而不会连接相邻标记并消失。

发生这种情况是因为 C++ 被设计为一次性编译,所以一旦 # ## # 序列被预处理器预处理为 ##,它永远不会再次“预处理”。

关于c++ - 哈希标记 (#) 在对象宏扩展列表中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58734184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com