检查序列化声明的顺序和成员定义的顺序
2009-04-11 16:15
155 查看
DataIO_is_realdump用来推断一个对象是否可以直接通过dump内存来完成序列化,如果可以,在load/save时会有极大的性能提高。
如果dump后,一些成员除了需要byte_swap,而不需要其它任何转化,也可以安全地先dump然后再byte_swap,这样比一个成员一个成员地load/save并且byte_swap要快得多。但是可以引发一个问题,就是如果序列化声明的顺序和成员定义的顺序不同,并且推断结果表明DataIO_is_realdump为真,真正序列化的顺序就就是成员定义的顺序,和序列化声明的顺序不同,而序列化声明的顺序才是调用者真正的意图。一开始没有仔细考虑这个问题,只是把它丢给使用者,但是这样的错误实在太微妙了,很多时候都不会出错(因为load和save一样),除非load/save一个优化一个没优化,问题才会暴露出来。
febird.DataIO 现在可以检查这种情况。
如果dump后,一些成员除了需要byte_swap,而不需要其它任何转化,也可以安全地先dump然后再byte_swap,这样比一个成员一个成员地load/save并且byte_swap要快得多。但是可以引发一个问题,就是如果序列化声明的顺序和成员定义的顺序不同,并且推断结果表明DataIO_is_realdump为真,真正序列化的顺序就就是成员定义的顺序,和序列化声明的顺序不同,而序列化声明的顺序才是调用者真正的意图。一开始没有仔细考虑这个问题,只是把它丢给使用者,但是这样的错误实在太微妙了,很多时候都不会出错(因为load和save一样),除非load/save一个优化一个没优化,问题才会暴露出来。
febird.DataIO 现在可以检查这种情况。
相关文章推荐
- 检查序列化声明的顺序和成员定义的顺序
- C语言定义结构体时注意成员变量的类型和声明顺序
- 3,在第2题的基础上进行如下操作:在类体内声明成员函数,而在类外定义成员函数
- 黑马程序员_object c学习日记①_类的声明定义、点语法及成员变量作用域
- 静态成员声明,定义(转)
- C++中类的声明与其成员函数的定义分离--以提高类的复用性
- 类成员变量的初始化不是按照初始化表的顺序被初始化的,而是按照在类中声明的顺序被初始化的。
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
- 在初始化列表中,成员变量的初始化顺序是其在类中声明顺序,而非列表中的顺序。
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 4-8-实参与形参、函数声明与定义、函数读取顺序、可变参数的函数、函数生存周期
- effective C++笔记之条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同
- 静态成员声明,定义
- 关于模板类中模板成员函数在类定义外部特化报错,错为声明与定义不匹配
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- 类、类定义、类声明、类的数据成员、类的成员函数的一些注意点
- 几个基本概念:成员函数,函数声明,函数原型,函数定义
- 声明一个哺乳动物类Mammal,再由此派生出狗类Dog,二者都定义Speak()成员函数,基类中定义为虚函数,声明类Dog的一个对象,调用函数Speak()
- C++编程规范指47.以同样的顺序定义和初始化成员变量
- 条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同