草庐IT

c++ - 使用 POD 高效移动类(class)

如何有效地移动具有大量POD成员的类(class)?示例:struct{inta1;inta2;inta3;.........};“移动”是指行为类似于移动语义(std::move)。 最佳答案 POD不会移动,它们只会复制。因为没有间接性。因此,只需使用普通赋值,并要求编译器针对您想要的任何效率进行优化。记住要系统地衡量之前(你到底做了什么不同的事情)和之后。还要考虑浪费的程序员时间(即金钱)是否值得进行微优化。 关于c++-使用POD高效移动类(class),我们在StackOver

c++ - C 结构 (C++ POD) 和 google protobufs 之间的转换?

我的代码目前传递大量(有时是嵌套的)C(或C++普通旧数据)结构和数组。我想将它们与googleprotobufs相互转换。我可以手动编写在这两种格式之间进行转换的代码,但自动生成此类代码会更不容易出错。做这个的最好方式是什么?(这在具有足够自省(introspection)能力的语言中很容易迭代成员变量的名称,但这是我们正在谈论的C++代码)我正在考虑的一件事是编写python代码来解析C结构,然后吐出一个.proto文件,以及为所有类型从一个成员复制到另一个成员(在任一方向)的C代码,但也许有更好的方法……或者可能已经有另一个IDL可以生成:.h包含所有嵌套类型的文件.proto文

c++ - 如何在不导致 UB 的情况下将字节序列重新解释为 POD 结构?

假设我们得到一些数据作为字节序列,并想将该序列重新解释为一个结构(有一些保证数据确实是正确的格式)。例如:#include#include#include#include#includestructData{std::int32_tsomeDword[629835];std::uint16_tsomeWord[9845];std::int8_tsomeSignedByte;};Data*magic_reinterpret(void*raw){returnreinterpret_cast(raw);//BAD!Breaksstrictaliasingrules!}std::vectorg

c++ - POD 类型的二进制 I/O 如何不破坏别名规则?

二十多年前,我会(也不会)考虑使用POD结构进行二进制I/O:structS{std::uint32_tx;std::uint16_ty;};Ss;read(fd,&s,sizeof(s));//assumethissucceedsandreadssizeof(s)bytesstd::cout(我忽略了填充和字节顺序问题,因为它们不是我要问的问题的一部分。)“显然”,我们可以读入s并且编译器需要假设s.x和s.y的内容是别名读取()。因此,read()之后的s.x不是未定义的行为(因为s未初始化)。同样Ss={1,2};read(fd,&s,sizeof(s));//assumethi

c++ - 让 g++ 对未初始化的 POD 成员变量发出警告

如果您忘记在ctor初始化列表中声明成员POD,是否有办法打印警告?我正在查看文档,但找不到任何东西。g++-4.4在这里。 最佳答案 您可以启用-Weffc++以获得一堆荒谬的警告,包括每个非ctor初始化的成员。要检查实际UB,请使用valgrind。 关于c++-让g++对未初始化的POD成员变量发出警告,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6766397/

c++ - C++11 中的 POD 和继承。 struct的地址是否==第一个成员的地址?

(我已经编辑了这个问题以避免分心。在任何其他问题变得有意义之前,有一个核心问题需要被澄清。向那些现在回答似乎不太相关的人道歉。)让我们设置一个具体的例子:structBase{inti;};没有虚方法,也没有继承,一般是一个很笨很简单的对象。因此它是PlainOldData(POD)它回到了可预测的布局。特别是:Baseb;&b==reinterpret_cast&(b.i);这是根据Wikipedia(它本身声称引用了C++03标准):ApointertoaPOD-structobject,suitablyconvertedusingareinterpretcast,pointsto

c++ - 几乎 pod 数据的 reinterpret_cast(布局兼容性是否足够)

我正在尝试了解static_cast和reinterpret_cast。如果我是正确的,标准(9.2.18)表示pod数据的reinterpret_cast是安全的:ApointertoaPOD-structobject,suitablyconvertedusingareinterpret_cast,pointstoitsinitialmember(orifthatmemberisabit-field,thentotheunitinwhichitresides)andviceversa.[Note:TheremightthereforebeunnamedpaddingwithinaPO

c++ - MSVC12 认为从 std::array 派生的聚合不是 pod

鉴于以下#includestructlitmusfinal:std::array{};static_assert(std::is_pod>::value,"notpod");//thisfailsonMSVC:static_assert(std::is_pod::value,"notpod");以下编译器同意litmus是pods:clang++版本3.5(中继线198621)http://coliru.stacked-crooked.com/a/7add7a2fe58a7e38g++4.8.1http://coliru.stacked-crooked.com/a/74cfe97f06

c++ - C++ 中的引用类型是 POD 类型吗?

C++中的引用类型也是POD类型吗?int&是POD类型吗?那么structQ{int&i;}谁能帮帮我? 最佳答案 没有。设置引用某物的成员的唯一方法是通过用户声明的构造函数,因此,您的结构是非POD。更新:答案仍然是否定的。C++03标准规定“POD结构是一个聚合类,它没有非POD结构、非PODunion(或此类类型的数组)类型的非静态数据成员)或引用,以及...”(C++03标准第9节第5段)。在C++11中,POD结构“是一个既是普通类又是标准布局类的类,并且......”和标准布局类“没有类型为非标准布局类(或此类类型的数

c++ - 为什么删除了复制构造函数的结构不是 POD 类型?

我们有以下方法来测试我们的结构是否是POD。它总是返回真:boolpodTest(){structpodTest{intcount;intx[];};returnstd::is_pod::value;//Alwaysreturnstrue}到目前为止一切顺利。现在我们做一个更改并删除复制构造函数:boolpodTest(){structpodTest{podTest(constpodTest&)=delete;intcount;intx[];};returnstd::is_pod::value;//Alwaysreturnsfalse}这总是返回false。在阅读了is_pod的定义之