clang变量和函数中__和__的含义

The meaning of __ and __ in clang variables and functions

在clang的标准库中,变量上的_和__是什么意思? 这是 string_view.

的一部分
    inline 
       void __throw_out_of_range(const char*__msg)
   {
      throw out_of_range(__msg);
   }

    // __str_find_first_not_of
    template<class _CharT, class _SizeT, class _Traits, _SizeT __npos>
    inline _SizeT
       __str_find_first_not_of(const _CharT *__p, _SizeT __sz,
          const _CharT* __s, _SizeT __pos, _SizeT __n) _NOEXCEPT

___ 只是标识符的一部分。它们没有任何其他特殊含义。

但是,包含双下划线或以下划线开头后跟 upper-case 字母的标识符是为标准库保留的。不允许用户代码声明它们或将它们定义为宏。

标准库仅使用此类保留标识符供内部使用,以确保它不会干扰任何本应有效的用户代码。

例如这是一个有效的程序:

#define sz
#define SizeT
#include<string_view>
int main() {}

如果问题中显示的标准库实现仅使用 szSizeT 而不是 __sz_SizeT,则编译将失败。

但是

#define __sz
#define _SizeT
#include<string_view>
int main() {}

不是一个有效的程序,因此如果编译失败也没关系。