既然在 C++ 中可以轻松避免命名冲突,为什么标准库中仍然使用像“__x”这样的疯狂标识符?

问题描述 投票:0回答:1
有人告诉我,使用以几个

_

 开头的疯狂名称是避免 C 头文件中命名冲突的一种方法。我认为,在C++中,命名冲突可以通过
namespace
或其他方式轻松避免,而且没有必要这样做。

然而,当我无意中打开

stl_vector.h

时,却发现到处都是这样疯狂的名字。我什至在类内部发现了像 
__x
 这样的变量(我不认为类内部的变量可能存在冲突)。我扫描了几个头文件,发现它很常见。我想知道为什么。

我的编译器是

g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

c++ identifier
1个回答
0
投票
我们只能推测人们为什么这样做,但在 C++ 中的标识符命名中继续使用某些避免冲突约定的原因之一是预处理的存在,即使它具有类作用域和命名空间,它不受这些功能的影响。如果类或命名空间中有名为

foo

 的内容,则名为 
foo
 的预处理器宏并不关心。

© www.soinside.com 2019 - 2024. All rights reserved.