我在 <type_traits> 头文件中看到了一些实现,但是有一些我找不到的实现,像这样:
// STRUCT TEMPLATE is_class
template <class _Ty>
struct is_class : bool_constant<__is_class(_Ty)> {}; // determine whether _Ty is a class
template <class _Ty>
_INLINE_VAR constexpr bool is_class_v = __is_class(_Ty);
Run Code Online (Sandbox Code Playgroud)
我想知道 __is_class 的实现。有人知道实现在哪里吗?我使用名为 Visual Studio 2019 的 IDE。
这些符号指的是由编译器本身识别和评估的保留的内置标记。编译器知道什么__is_class意思,针对给定的类型对其进行评估,然后使用评估的结果。
碰巧 gcc 在这里很好地记录了它的内置符号(这是针对 gcc 10.2,其他版本的 gcc 具有几乎相同的页面)。编辑:这是 VS 的同一页面——从外观上看,几乎是一样的。
在该页面上,您会碰巧找到__is_class为 gcc 定义的函数。其他编译器倾向于使事情以相同的方式工作,可能仅在符号本身的名称上有所不同。
总而言之,您不会__is_class在任何头文件中找到正式定义的 、 和其他人。这些函数、类等。阿尔。被烘焙到编译器本身。