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() {}
如果问题中显示的标准库实现仅使用 sz
和 SizeT
而不是 __sz
和 _SizeT
,则编译将失败。
但是
#define __sz
#define _SizeT
#include<string_view>
int main() {}
不是一个有效的程序,因此如果编译失败也没关系。
在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() {}
如果问题中显示的标准库实现仅使用 sz
和 SizeT
而不是 __sz
和 _SizeT
,则编译将失败。
但是
#define __sz
#define _SizeT
#include<string_view>
int main() {}
不是一个有效的程序,因此如果编译失败也没关系。