C++ 具名要求-布局

此页面中列出的具名要求,是 C++ 标准的规范性文本中使用的具名要求,用于定义标准库的期待。

某些具名要求在 C++20 中正在以概念语言特性进行形式化。在那之前,确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做,则可能导致非常复杂的编译器诊断。

布局

注意,标准并未定义这个子类别中指定的各名字的具名要求。
它们是由核心语言定义的类型分类。将它们作为具名要求于此处包含只是为了一致性。

拥有平凡的复制、赋值及析构函数的类

C++ 具名要求: TriviallyCopyable

要求

  • 每个复制构造函数均为平凡或弃置的
  • 每个移动构造函数均为平凡或弃置的
  • 每个复制赋值运算符均为平凡或弃置的
  • 每个移动赋值运算符均为平凡或弃置的
  • 至少一个复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符未弃置
  • 平凡而未弃置的析构函数

这意味着该类没有虚函数或虚基类。

标量类型和可平凡复制 (TriviallyCopyable) 对象的数组也是可平凡复制 (TriviallyCopyable) 的。

拥有平凡的构造函数、赋值及析构函数的类

C++ 具名要求: TrivialType

指定类型为平凡类型。

注意:标准中并没有定义具有这个名字的具名要求。这是核心语言所定义的一种类型类别。将它作为具名要求包含于此只是为了保持一致性。

要求

  • 可平凡复制 (TriviallyCopyable)
  • 拥有一个或多个默认构造函数,全部均为平凡或弃置的,且至少有一个未弃置。

非虚类,仅包含其他标准布局 (standard layout) 成员,且其全部具有相同的访问控制

C++ 具名要求: StandardLayoutType

指定一个类型为标准布局类型。标准布局类型适用于与其他语言编写的代码交流。

注意:标准中并没有定义具有这个名字的具名要求。这是核心语言所定义的一种类型类别。将它作为具名要求包含于此只是为了保持一致性。

要求

  • 所有非静态数据成员必须具有相同的访问控制
  • 没有虚函数或虚基类
  • 没有引用类型的非静态数据成员
  • 所有非静态数据成员和基类自身也是标准布局类型
  • 满足以下之一
  • 没有带有非静态数据成员的基类,或
  • 最终派生类中没有非静态数据成员,且至多有一个基类拥有非静态数据成员
  • 没有与首个非静态数据成员类型相同的基类(见空基类优化)
(C++14 前)

 不存在两个相同类型的(可能间接的)基类子对象

struct Q {};
struct S : Q { };
struct T : Q { };
struct U : S, T { }; // 并非标准布局类:有两个 Q 类型的基类子对象
所有非静态数据成员和位域都在同一类中声明(要么全在派生类中,要么全在某个基类中)
struct B { int i; };         // 标准布局类
struct C : B { };            // 标准布局类
struct D : C { };            // 标准布局类
struct E : D { char : 4; };  // 非标准布局类
  • 不存在与如下各项具有相同类型的基类子对象
  • 对于非联合类型,为其首个非静态数据成员(见空基类优化),递归地,若该数据成员具有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。
  • 对于联合体类型,为其任何非静态数据成员,递归地,若该数据成员具有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。
  • 对于数组类型,为数组元素的类型,递归地,若该数据成员拥有非联合类类型,则为其首个数据成员,或者若该数据成员为联合体类型,则为其所有非静态数据成员,或者若该数据成员为数组类型,则为其元素类型,依此递归。

性质

见标准布局。


POD(简旧数据)结构体,与 C 的 struct 兼容

C++ 具名要求: PODType

指定类型为 POD(Plain Old Data,简旧数据)类型。这表示该类型与用于 C 程序语言的类型兼容,即能直接以其二进制形式与 C 库交互。

注意:标准中并没有定义具有这个名字的具名要求。这是核心语言所定义的一种类型类别。将它作为具名要求包含于此只是为了保持一致性。

此类型要求在 C++ 标准中已弃用。其所有使用都已被替换成更为斟酌过的类型要求,例如平凡类型 (TrivialType) 。

要求

以下之一:

  • 标量类型;
  • 满足下列要求的类类型(class 或 struct 或 union):
  • 聚合类型;
  • 没有非 POD 的非静态成员;
  • 没有引用类型的成员;
  • 没有用户定义的复制构造函数;
  • 没有用户定义的析构函数
(C++11 前)
  • 为平凡类型;
  • 为标准布局类型;
  • 没有非 POD 的非静态成员;
(C++11 起)
  • 这种类型的数组。

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

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

相关文章

Pendulum详解4——Pendulum在数据挖掘中的威力 - 时间的宝藏

写在开头 在这个数字化时代,时间数据无处不在,而它往往蕴含着丰富的信息。然而,在数据挖掘中,我们经常需要处理不同时间维度的数据,从而更好地理解和预测各种现象。Pendulum库的引入为我们提供了一种简洁而强大的工具,可以更好地处理和分析时间数据。 1. 集聚分析 地理…

Apache Doris 2.0.2 安装步骤 Centos8

Linux 操作系统版本需求 Linux 系统版本当前系统版本CentOS7.1 及以上CentOS8Ubuntu16.04 及以上- 软件需求 软件版本当前版本Java1.81.8.0_391GCC4.8.2 及以上gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) 1、查看操作系统版本 方法 1:使用命令行 打开终端或…

MongoDB笔记

文章目录 安装查看数据库命令手册 学习地址:https://www.bilibili.com/video/BV16u4y1y7Fm 安装 下载地址 https://www.mongodb.com/try/download/community-kubernetes-operator查看数据库 查看当前数据库 show dbs show databases切换数据库 use 数据库名称cls…

建站指南,如何将拥有的域名自定义链接到wordpress

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 在Dynadot上,我们可已经账户中管理的…

主题-----读微信公众号

1.SOA 面向服务的架构(Service-Oriented Architecture,SOA)还没有一个公认的定义。许多组织从不同的角度和不同的侧面对 SOA 进行了描述,较为典型的有以下三个: (1)W3C 的定义:SOA 是…

小H靶场笔记:DC-5

DC-5 January 5, 2024 10:44 AM Tags:screen提权 Owner:只惠摸鱼 信息收集 探测靶机ip,大概率为192.168.199.135,且开放端口为80和111 扫描端口80,111相关服务、版本、操作系统、漏洞信息 sudo nmap -sS -O -sV 19…

【数字图像处理】万字长文的数字图像处理全貌

数字图像处理 数字图像处理也是一个广泛而深入的领域,涉及多个章节和主题。 图像获取与表示: 学习如何获取和表示数字图像,包括不同的图像格式和编码方法。 图像增强: 改善图像质量,使其更适合特定应用,例…

Danil Pristupov Fork(强大而易用的Git客户端) for Mac/Windows

在当今软件开发领域,团队协作和版本控制是非常重要的方面。在这个过程中,Git成为了最受欢迎的版本控制工具之一。然而,对于Git的使用,一个好的客户端是至关重要的。 今天,我们要为大家介绍一款强大而易用的Git客户端—…

.NET 8.0 本机 AOT

在软件开发领域,优化性能和简化效率仍然至关重要。.NET 平台二十年来不断创新,为开发人员提供了构建弹性且高效的软件解决方案的基础架构。 与本机 AOT(提前)编译相结合,取得了显着的进步。本文深入研究.NET Native AO…

计算机进入BIOS - Win/Linux

计算机进入BIOS - Win/Linux 快捷键方法(通用)Win系统方法Linux系统方法 快捷键方法(通用) 此方法为通用方法,适用于任何型号的计算机,包括台式机和笔记本,也包括Win系统和Linux系统。 进入BI…

OpenCV-Python(28):基于GrabCut 算法交互式前景提取

目标 GrabCut 算法原理,使用GrabCut 算法提取图像的前景 创建一个交互是程序完成前景提取 介绍 GrabCut算法是一种基于图像分割的算法,用于将图像中的前景物体从背景中准确地分离出来。它是由Carsten Rother等人于2004年提出的。 GrabCut算法的基本思想…

C#,入门教程(10)——常量、变量与命名规则的基础知识

上一篇: C#,入门教程(09)——运算符的基础知识https://blog.csdn.net/beijinghorn/article/details/123908269 C#用于保存计算数据的元素,称为“变量”。 其中一般不改变初值的变量,称为常变量,简称“常量”。 无论…

QT工具栏开始,退出

QT工具栏开始,退出 //初始化场景QMenuBar *bar menuBar();setMenuBar(bar);QMenu *startbar bar->addMenu("开始");QAction * quitAction startbar->addAction("退出");connect(quitAction , &QAction::triggered,[](){this->c…

Pycharm打包程序为exe文件

Pycharm打包程序为exe文件 【一】导入模块pyinstaller 【1】图片说明 【2】文字说明 根据图片顺序执行 首先点击file进入settings界面,在setting界面找到Project下面的Python Interpretor,点击号进行模块的添加在搜索框中输入pyinstaller,…

三、Kubernetes(K8s)入门(一)

视频教程连接k8s 入门到微服务项目实战.xmind链接:https://pan.baidu.com/s/1q04euH7baE8eXNyG3kPPbA 提取码:jej4比较好的笔记 kubectl命令的语法如下: kubectl [command] [type] [name] [flags]comand:指定要对资源执行的操作…

了解单元测试

一,测试分类 1.1 E2E测试(end to end端到端测试) 属于黑盒测试。 主要通过测试框架,站在用户测试人员的角度,模拟用户的操作进行页面功能的验证,不管内部实现机制,完全模拟浏览器的行为。&am…

任我行CRM系统SmsDataList接口SQL注入漏洞复现 [附POC]

文章目录 任我行CRM系统SmsDataList接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议任我行CRM系统SmsDataList接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关…

C++《异常》

前言:C有一套独立的异常处理机制,今天就来做详细的介绍try,catch这两个词等 在C语言中处理错误的方式和缺陷有: 返回错误码。 缺陷: 1.错误码不好设置,比如:除0操作,就不好返回错误码。如果返回一个数字&…

Flume基础知识(八):Flume 拓扑结构全解

1. 简单串联 这种模式是将多个 flume 顺序连接起来了,从最初的 source 开始到最终 sink 传送的 目的存储系统。此模式不建议桥接过多的 flume 数量, flume 数量过多不仅会影响传输速 率,而且一旦传输过程中某个节点 flume 宕机,会…

LC 2807. 在链表中插入最大公约数

2807. 在链表中插入最大公约数 难度 : 中等 题目大意: 给你一个链表的头 head ,每个结点包含一个整数值。 在相邻结点之间,请你插入一个新的结点,结点值为这两个相邻结点值的 最大公约数 。 请你返回插入之后的链表…