【问题标题】:Is there a C++11/14 alternative to __attribute__((packed))是否有 C++11/14 替代 __attribute__((packed))
【发布时间】:2016-02-17 16:03:25
【问题描述】:

C++11 引入了标准化属性语法的概念。我找不到所有受支持属性的列表。是否有替代__attribute__((packed)) 的 C++11 属性?

例如

struct __attribute__((packed)) Pack {
   uint8_t field1;
   uint8_t field2;
};

【问题讨论】:

标签: c++ c++11 gcc clang c++14


【解决方案1】:

很遗憾,没有。标准当前定义的属性是:

  • [[noreturn]];
  • [[carries_dependency]];
  • [[deprecated]]/[[deprecated(reason)]];

其他一切都是实现定义的。

【讨论】:

  • @YSC cppreference 是...C++ 的参考:大部分文本已经取自标准,尽管形式较少。 There you have it.
  • cppreference 是一个维基;我所说的规范是指官方的 C++ 规范化文档。如果您知道我可以在哪个部分找到 C++11 属性的定义...
  • @YSC 它在 §7.6.{3, 4, 5}, [decl.attr.*] 下。我不会将它包含在答案中,因为不需要也不需要这种形式:cppreference 绝对足够了,你会发现它的文本非常接近标准文本。当然,如果仅供参考,那就另当别论了。
  • Fwiw 我不认为这是不幸的,打包的结构通常是一个 hack。如果您需要结构布局是可移植的,您可以使用 alignas 将某些成员的对齐增加到跨平台最小值,而不是冒未对齐加载的风险
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 2015-10-18
  • 2011-08-04
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
相关资源
最近更新 更多