C++ 用C+打包的属性+;叮当声

C++ 用C+打包的属性+;叮当声,c++,attributes,clang,pragma,C++,Attributes,Clang,Pragma,我原以为双括号表示法是为了替换\uuuuu属性((foo)),但我没有得到等价性 C++14的铿锵工具链集 class [[packed]] test {}; class __attribute__((packed)) test2 {}; test有一个关于未知属性的警告packed已忽略测试2没有警告。如果我将packed替换为虚构属性,两者都会发出警告 用叮当声打包结构的最好方法是什么 我原以为双括号表示法是为了替换\uuuuu属性((foo)),但我没有得到等价性 这并不意味着完全等同。

我原以为双括号表示法是为了替换
\uuuuu属性((foo))
,但我没有得到等价性

C++14的铿锵工具链集

class [[packed]] test {};
class __attribute__((packed)) test2 {};
test
有一个关于未知属性的警告
packed
已忽略<代码>测试2没有警告。如果我将
packed
替换为虚构属性,两者都会发出警告

用叮当声打包结构的最好方法是什么

我原以为双括号表示法是为了替换
\uuuuu属性((foo))
,但我没有得到等价性

这并不意味着完全等同。双括号表示法是C++标准引入的属性,或多或少具有标准意义。这些属性通常已经作为特定于编译器的属性存在,但这并不意味着所有特定于编译器的属性都有相应的标准属性。所以你不能仅仅因为
\uuuu属性((packed))
是一个东西就指望
[[packed]]]
是一个东西

尽管如此,该标准还是为编译器提供了添加使用双括号的自定义属性的选项。但这些属性通常是有范围的。在本例中,自定义属性名为
[[gnu::packed]]
。顾名思义,它是特定于供应商的。

标准属性-