为什么C++标准库使用像'__r'这样的变量名?[副本]

xxe27gdn  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(120)

此问题已在此处有答案

Why do people use __ (double underscore) so much in C++(7个回答)
3天前关闭。
我对C了解得越多,我就越觉得C标准库源代码(所有这些std函数都是在那里实现的)大量使用带有__前缀的变量名。像std::addressof()使用__r作为其单个参数。我试图得到有意义的答案,为什么会这样(甚至问ChatGPT!)但没有运气。我知道__前缀是保留的,用户代码不能使用这样的名称。但是,用户代码怎么会与std中的函数参数名发生冲突呢?这就是我想不通的地方std中的私有成员也是如此。甚至局部变量也以__前缀开头!在这些情况下使用__前缀有什么意义?这几乎就像标准库实现者通过他们的实践建议,以某种方式对用户代码隐藏实现细节取决于这种约定。如果没有这种做法,用户可能会以某种方式依赖那些“不适合他们”的名称。
顺便说一下,这使得C++标准库源代码更难阅读。也许是故意的。

h9a6wy2h

h9a6wy2h1#

假设他们会使用“普通”标识符。假设实现使用foo作为标识符。然后你可以写这样的代码:

#define foo 
 #include <some standard header>

如果some standard header使用标识符foo,可能会发生不好的事情。
这就是为什么在实现中要保留某些标识符的原因。你不能使用它们,否则可能会有冲突。实现必须使用它们,否则可能会出现上述冲突。
详情请看这里:https://en.cppreference.com/w/cpp/language/identifiers

相关问题