C++ 什么';s宏“LIBCPP”模板“u VIS in”的用法;类“LIBCPP”模板“相对于向量”;
与标准库类vector一样,声明总是这样 “类_LIBCPP_模板_visvector”C++ 什么';s宏“LIBCPP”模板“u VIS in”的用法;类“LIBCPP”模板“相对于向量”;,c++,c++11,macros,libc++,C++,C++11,Macros,Libc++,与标准库类vector一样,声明总是这样 “类_LIBCPP_模板_visvector” 不知道为什么会在class关键字和类名之间插入宏。这是一个符号可见性宏。其原因是为了确保编译标志不会影响std::vectorABI。使用叮当声,它将扩展为\uuuuuuu属性((\uuuu可见性\uuuuuu(“默认”))。宏允许它适应不同的编译器/平台,如中所述: Libc++使用各种“可见性”宏以提供稳定的 库和标头中的ABI。这些宏通过更改 符号的可见性和内联特性 适用于 \u LIBCPP\u
不知道为什么会在class关键字和类名之间插入宏。这是一个符号可见性宏。其原因是为了确保编译标志不会影响
std::vector
ABI。使用叮当声,它将扩展为\uuuuuuu属性((\uuuu可见性\uuuuuu(“默认”))
。宏允许它适应不同的编译器/平台,如中所述:
Libc++使用各种“可见性”宏以提供稳定的
库和标头中的ABI。这些宏通过更改
符号的可见性和内联特性
适用于
\u LIBCPP\u TEMPLATE\u VIS
将类型的typeinfo和vtable标记为具有默认可见性。这
宏对类型成员函数的可见性没有影响
GCC行为:GCC不支持Clang的type_可见性(…)
属性在GCC中,使用可见性(…)属性和成员
功能受到影响
Windows行为:DLL不支持类上的dllimport/export
模板。宏在此平台上的定义为空
另请参阅文档。您在谈论哪个编译器?可能与苹果Xcode i使用的@RSahu LLVM实现重复guess@newonelei为什么他们使用
class\u LIBCPP\u TEMPLATE\u VIS vector
而不是class\u attribute\u(…)vector
?这是因为他们可以简单地删除编译器特定的\uuuuu属性(如果它在不同的编译器上使用)(或者有关闭它们的选项),并且他们还可以在多个类似属性之间进行选择(他们可以在\uu属性(默认)和属性(默认)之间进行选择)__(“默认设置”))