问题标签 [standard-layout]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 什么是聚合和 POD,它们如何/为什么特别?
此常见问题解答是关于聚合和 POD 的,涵盖以下材料:
- 什么是聚合?
- 什么是POD(普通旧数据)?
- 它们有什么关系?
- 它们如何以及为什么特别?
- C++11 有什么变化?
c++ - 为什么 C++11 的 POD “标准布局”定义是这样的?
我正在研究C++11中新的、宽松的 POD 定义(第 9.7 节)
标准布局类是这样的类:
- 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
- 没有虚函数 (10.3) 和虚基类 (10.1),
- 对所有非静态数据成员具有相同的访问控制(第 11 条),
- 没有非标准布局的基类,
- 要么在派生最多的类中没有非静态数据成员,并且最多有一个具有非静态数据成员的基类,要么没有具有非静态数据成员的基类,并且
- 没有与第一个非静态数据成员相同类型的基类。
我强调了令我惊讶的部分。
如果我们容忍具有不同访问控制的数据成员会出现什么问题?
如果第一个数据成员也是基类会出现什么问题?IE
我承认这是一个奇怪的结构,但为什么应该Bad
禁止而不是Good
?
最后,如果多个组成类有数据成员,会出现什么问题?
c++ - C ++ 11中类型的逐字节副本?
C++11 标准保证字节对字节的副本对于 POD 类型始终有效。但是某些琐碎的类型呢?
这是一个例子:
如果我要逐字节复制此结构,是否可以保证正确复制,即使它在技术上不是 POD?什么时候不能对对象进行字节复制?
c++ - 标准布局和不可复制的属性
C++11,第 9/7 节:
标准布局类是这样的类:
- 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
- 没有虚函数,也没有虚基类,
- 对所有非静态数据成员具有相同的访问控制,
- 没有非标准布局的基类,
- 要么在派生最多的类中没有非静态数据成员,并且最多有一个具有非静态数据成员的基类,要么没有具有非静态数据成员的基类,并且
- 没有与第一个非静态数据成员相同类型的基类。
那么,有没有办法使具有标准布局的类不可复制?如果是,如何?
从 boost::noncopyable 私有继承将不起作用,因为它使复制构造函数私有(因此不是标准布局)。boost::noncopyable 的实现是这样的:
由于私有部分,它不是标准的布局类。我还注意到私有继承是否会破坏任何标准布局规则。
输出是:
上面的示例表明,私有继承boost::noncopyable
将类更改为不符合标准布局。我不确定这是否是一个 g++ 错误(我使用的是 g++ 4.6.1),或者该标准在某种程度上被违反了。
c++ - 在 C 中包装 C++:派生到基本转换
我将一个简单的 C++ 继承层次结构包装到“面向对象”的 C 中。我试图弄清楚在将指向 C++ 对象的指针视为指向不透明 C 结构的指针时是否存在任何问题。特别是,在什么情况下派生到基的转换会引起问题?
类本身相对复杂,但层次结构较浅,仅使用单继承:
我计划通过以下相当标准的面向对象的 C 将其公开给 C 客户端:
C 客户端只传递指向底层 C++ 对象的指针,并且只能通过函数调用来操作它们。所以客户端最终可以做类似的事情:
并使对 FirstDerived::someOperation() 的虚拟调用按预期成功。
这些类不是标准布局,但不使用多重继承或虚拟继承。这能保证工作吗?
请注意,如果重要的话,我可以控制所有代码(C++ 和 C 包装器)。
c++ - 标准布局 c++
我正在阅读有关C++ POD、Trivial 和标准布局类的精彩文章 我对标准布局还没有清楚了解的一个属性如下:-
因此以下将不是标准布局,因为它的第一个成员与基类相同
但是在性能方面和属性方面,上述结构有何不同?
这是对上面那个的更正。
c++ - C++11 标准布局违规的影响
我有两节课:
如果我正确地解释了 C++11 标准布局限制,那么 B 不是标准布局,因为 B 和 A 都具有非静态数据成员。我想结合 HDF5 使用像 B 这样的结构,这需要使用offsetof宏,(据我所知)仅限于标准布局对象。我的问题是,可能会出现什么问题,表达如下
它适用于 gcc-4.6,但有没有人在类似情况下遇到过意外行为?如果是这样,哪个和哪个编译器?最坏的情况是什么?
问候克拉斯
c++ - 为什么这个结构不是标准布局?
一段代码胜过千言万语。
c++ - STL 容器是否有任何标准布局保证?
使用 g++4.7 和 libstdc++ 我得到std::is_standard_layout<A>::value == true
.
但是其他编译器或标准库会发生什么?
是否有任何保证(至少可以肯定?)STL 容器不会破坏标准布局?
背景:
这允许使用static_cast<B &>(a).bar()
even for A a;
。(我不是说这是好的设计!)。
c++ - C++ 标准布局和参考
根据 C++ 标准:
标准布局类是这样的类:
— 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员。
引用的哪些属性会阻止具有引用成员的类包含在标准布局类的定义中?