4.2 Serializable Concept(3)

Compile Time Warnings and Errors

一些序列化特性可能与其他特性发生冲突。有时,这些冲突会导致错误的行为(例如,创建无法读取的归档),而其他时候它们代表了库用户可能存在的概念错误,可能导致意外行为。在尽可能的情况下,这些冲突在编译时被检测到,然后生成错误(BOOST_STATIC_ASSERT)或警告(BOOST_STATIC_WARNING)。它们以一种依赖于编译器的方式生成,应该显示出一条实例化链,直到检测到错误/警告的点。如果没有这个能力,将会很难追踪到库使用中的错误或意外行为。以下是被检测到的冲突列表:

object_level - error

此错误捕获试图序列化其实现级别设置为non_serializable的类型的尝试。

object_versioning - error

出于效率原因,可能会为某种类型分配一个不包括类型信息的序列化级别,这将阻止为该类型分配新版本号的尝试。在这种情况下,此错误会捕获尝试分配版本号的操作。这必定是用户的错误。

object_tracking - warning

以下代码在编译时会显示一条消息:

T t;
ar << t;

除非将tracking_level序列化特性设置为"track_never"。以下代码将无问题地编译通过:

const T t;
ar << t;

同样,以下代码将在编译时引发错误:

T * t;
ar >> t;

如果tracking_level序列化特性设置为track_never。这个案例说明了此消息的功能。最初,它是由Peter Dimov在邮件列表中用作示例的。

class construct_from { ... };
void main(){ ... Y y; construct_from x(y); ar << x; }

假设上面的消息没有显示,而是直接使用了这段代码。这个示例编译并执行正常。之所以没有进行跟踪,是因为construct_from从未通过指针进行序列化。现在,过了一段时间,第二个程序员(2)出现并进行了一次增强。他希望归档可以成为一种日志。

void main(){ ... Y y; construct_from x(y); ar << x; ... x.f(); // 更改x... ar << x;
}

再次没有问题。他在归档中得到了两个不同的副本,每个副本都是不同的。也就是说,他得到了他期望的完全相符,自然是高兴的。

现在过了一段时间,第三个程序员(3)看到了construct_from并说:“哦,很酷,正是我需要的。”他在一个完全不相关的模块中编写了一个函数(项目如此庞大,以至于他甚至没有意识到原始用法的存在),并编写了如下内容:

class K { shared_ptr <construct_from> z; template <class Archive> void serialize(Archive & ar, const unsigned version){ ar << z; } 
}; 

他构建并运行程序,测试了他的新功能。一切都运行得很顺利,他很高兴。

事情一如既往地顺利进行。一个月过去了,人们发现在加载上个月制作的存档(读取日志)时出现了问题。事情不正常。第二个日志条目总是与第一个相同。在一系列长时间的、日益尖锐的电子邮件交流之后,人们发现程序员(3)无意中破坏了程序员(2)的代码。这是因为通过指针进行序列化,现在跟踪“日志”对象。这是因为默认的跟踪行为是“track_selectively”。这意味着仅在整个程序中通过指针序列化类实例时才跟踪类实例。现在从相同地址进行的多次保存仅导致第一个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用cv2将图片改为素描图

1 使用cv2&#xff0c;将图片改为素描图&#xff0c;效果如图&#xff1a; 2 代码实现&#xff1a; python 3.8 import cv2img cv2.imread("2.jpg") # 灰度 grey cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) invert cv2.bitwise_not(grey) # 高斯滤波 blur_img cv2…

【JAVA】关于抽象类的概念

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 前言 在Java中&#xff0c;抽象类是一种特殊的类&#xff0c;它无法被实例化。它只能被用作其他类的基类&#xff0c;以便子类可以继承它的属性和方法。今天我们就来谈谈JAVA中的抽象类。…

Java Spring Boot: 极简配置与快速开发的利器

引言&#xff1a; Java Spring Boot是一款开源的Java框架&#xff0c;它以极简配置和快速开发为特点&#xff0c;帮助开发者轻松构建基于Spring框架的应用程序。本文将介绍Spring Boot的核心特性&#xff0c;并结合案例和代码&#xff0c;展示其在简化配置、内嵌服务器、自动化…

C++编程法则365天一天一条(14)sizeof运算符使用

文章目录 基本用法失效的多态数组就是数组使用限制作用于空class作用于引用基本用法 sizeof运算符用于查询对象或类型的大小。它在编译时计算,并返回以字节为单位的对象或类型的大小。 在某些情况下,我们需要知道对象的实际大小。例如,当我们分配内存或操作具有特定大小要…

qml 无法修改listview表头控件文本

比如在Listview的表头设置了一个复选框&#xff0c;之后想要在其他控件中动态修改复选框的文本&#xff0c;通过id来修改无效&#xff0c;因为它在表头内&#xff0c;对其他控件来说未定义。可以采用一个外部属性来解决&#xff1a; Window {width: 400height: 400visible: tr…

[2023.09.24]: 今天差点又交白卷

今天周日&#xff0c;搞定了家里装修的一件事情&#xff0c;周末的事特别多&#xff0c;总算在10点的时候&#xff0c;解决了昨天那个输入焦点设置失败的问题。 在探索Rust编写基于web_sys的WebAssembly编辑器&#xff1a;挑战输入光标定位的实践中&#xff0c;我们总结了设置光…

线性代数基础-行列式

一、行列式之前的概念 1.全排列&#xff1a; 把n个不同的元素排成一列&#xff0c;称为n个元素的全排列&#xff0c;简称排列 &#xff08;实际上就是我们所说的排列组合&#xff0c;符号是A&#xff0c;arrange&#xff09; 2.标准序列&#xff1a; 前一项均小于后一项的序列…

[Linux入门]---管理者操作系统

文章目录 1.操作系统概念2.设计操作系统的目的3.操作系统如何进行管理系统调用和库函数概念 1.操作系统概念 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括&#xff1a; 内核&#xff08;进程管理&#xff0c;内存…

ISP技术概述

原本或许是为了对冲手机系统和APP设计无力感而诞生的拍照功能,现今却成为了众手机厂家除背部设计外为数不多可“卷”的地方,自拍、全景、夜景、小视频等旺盛的需求让这一技术的江湖地位迅速变化。对圈内人士而言,这一波变化带来的后摄、双摄、多摄、暗光、防抖、广角、长焦、…

滑动窗口-求数组的所有连续子数组【学习算法】

滑动窗口-求数组的所有连续子数组【学习算法】 前言版权推荐滑动窗口-求数组的所有连续子数组代码 最后 前言 2023-9-24 22:46:27 以下内容源自《【学习算法】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页…

【android】如何设置LD_LIBRARY_PATH?

目录 一 配置方法 1 进入Android shell 2 使用export命令 3 使用echo命令查看变量是否设置成功 二 扩展 1 LD_LIBRARY_PATH设置多个路径 2 push文件 一 配置方法 android中配置LD_LIBRARY_PATH的方法具体为&#xff1a; 1 进入Android shell adb shell 2 使用export…

ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 1、数据库表方面 在原来sys_notice修改基础上增加一个表叫sys_notice_send 表结构如下&#xff1a; DROP …

AVLoadingIndicatorView - 一个很好的Android加载动画集合

官网 GitHub - HarlonWang/AVLoadingIndicatorView: DEPRECATED 项目简介 AVLoadingIndicatorView is a collection of nice loading animations for Android. You can also find iOS version of this here. Now AVLoadingIndicatorView was updated version to 2.X , If …

GitStats - 统计Git所有提交记录工具

如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps&#xff0c;除了提供基础设施&#xff0c;指标和数据是也是一个很重要的一环&#xff0c;比如需要分析下某个 Git 仓库代码提交情况&#xff1a; 该仓库的代码谁提交的代码最多 该仓库的活跃度是什么样子的 各个时段的提交…

安装Linux虚拟机——以ubuntukylin-16.04.7-desktop-amd64.iso为例

正文 安装VMware 重要提示 安装软件之前&#xff0c;请先退出360、电脑管家等安全类软件&#xff0c;这类软件会阻止我们安装的软件进行注册表注册&#xff0c;很可能导致安装失败。确认物理机&#xff08;也就是你自己使用的电脑&#xff09;的防火墙已经关闭。 下载 打开…

python web编程一:token、session、cookie、密码加解密

1 认证 1 传统的session-cookie机制 HTTP协议是无状态协议&#xff0c;为了解决它产生了cookie和session技术。 浏览器发起第一次请求到服务器&#xff0c;服务器发现浏览器没有提供session id&#xff0c;就认为这是第一次请求&#xff0c;会返回一个新的session id给浏览器…

数据仓库整理

数仓 olap vs oltp OLTP主要用于支持日常的业务操作&#xff0c;如银行交易、电子商务等&#xff0c;强调数据的准确性、实时性和并发性。OLAP主要用于支持复杂的数据分析&#xff0c;如数据仓库、决策支持等&#xff0c;强调数据的维度、聚合和可视化。 将OLTP数据库的数据…

C++之lseek64应用总结(二百三十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

CMU15-445 format\clang-format\clang-tidy 失败

CMU15-445 format\clang-format\clang-tidy 失败 问题修改 问题 -- Setting build type to Debug as none was specified. -- Youre using Clang 14.0.0 CMake Warning at CMakeLists.txt:67 (message):BusTub/main couldnt find clang-format.CMake Warning at CMakeLists.tx…

YouCompleteMe 安装踩坑

Vim里下载完插件后&#xff0c;打开vim&#xff0c;可能遇到以下报错 The ycmd server SHUT DOWN (restart with ‘:YcmRestartServer’). Unexpected exit code 1 没有安装server&#xff0c;进入其目录&#xff0c;C语言类的运行 python3 install.py --clangd-completer --v…