Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >非菱形继承树中的虚拟继承-内存和行为副作用

非菱形继承树中的虚拟继承-内存和行为副作用
EN

Stack Overflow用户
提问于 2017-02-07 11:57:37
回答 2查看 115关注 0票数 0

我理解在钻石继承树中虚拟继承的效应,但不理解非钻石继承树中的副作用(如果有的话)。

如果你刚刚

代码语言:javascript
运行
AI代码解释
复制
class A;

class B: public virtual A;

这两个类的行为内存布局(如果有的话)有什么不同,即构造函数调用的顺序等等。

假设class A有数据成员。

请为您的回答提供正式文件

EN

回答 2

Stack Overflow用户

发布于 2017-02-07 12:27:28

虚拟继承的一个效果是,static_cast下传不起作用。如果您想从虚拟基础向下转换,则必须使用dynamic_cast

代码语言:javascript
运行
AI代码解释
复制
A* pa = new B;
B* pb1 = static_cast<B*>(pa); // doesn't work: compilation error
B* pb2 = dynamic_cast<B*>(pa); // works

引用标准(5.2.9):

类型“cv1 B的指针”的prvalue,其中B是类类型,可以转换为“指向cv2 D的指针”.如果..。B既不是D的虚拟基类,也不是D的虚拟基类的基类。

票数 2
EN

Stack Overflow用户

发布于 2017-02-07 15:40:41

关于内存布局,一些编译器可能会将虚拟基的数据成员放在子类的数据成员之后(参见被认为有用的多重继承):

代码语言:javascript
运行
AI代码解释
复制
class A {
public:
    int a;
};

class B : public virtual A {
public:
    int b;
};

int main() {
    B b;

    std::cout << "&b.a < &b.b = " << (&(b.a) < &(b.b)) << std::endl; // &b.a < &b.b =  = 0

    return 0;
}

另一方面,非虚拟基的数据成员通常放在之前子数据成员:

代码语言:javascript
运行
AI代码解释
复制
class A {
public:
    int a;
};

class B : public virtual A {
public:
    int b;
};

int main() {
    B b;

    std::cout << "&b.a < &b.b = " << (&(b.a) < &(b.b)) << std::endl; // &b.a < &b.b = 1

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42098826

复制
相关文章
SQL 将多列的数据转到一列
如题。假设我们要把 emp 表中的 ename、job 和 sal 字段的值整合到一列中,每个员工的数据(按照 ename -> job -> sal 的顺序展示)是紧挨在一块,员工之间使用空行隔开。
白日梦想家
2020/09/08
5.9K0
R包—iGraph
这几天收到师兄的任务,熟悉iGRaph包的使用,通过查资料,外加自己的实践,在此做个简单的学习笔记。 以下例子均是在R 3.0.1版本下测试的。 1.用igraph创建图表 g<- graph(c(1,2, 1,3, 1,4, 2,4, 3,4), directed=T) > g IGRAPH D--- 4 5 -- > plot(g, layout=layout.fruchterman.reingold) 2.创建多种图形的图表 > g1 <- graph.full(4) > g1 IG
学到老
2018/03/16
1.5K0
SQL练习之两个列值的交换
SELECT * FROM dbo.test2 现在我们将Province列值和Company列值互换,代码如下: UPDATE test2 SET Company=Province, Provin
郑小超.
2018/01/24
3.8K0
SQL练习之两个列值的交换
bootstrap 将页面分为三列
<div class="container"> <div class="row"> <section class="content-primary col-md-5">
用户5760343
2019/10/14
1.5K0
bootstrap 将页面分为三列
怎么将多行多列的数据变成一列?4个解法。
- 问题 - 怎么将这个多行多列的数据 变成一列? - 1 - 不需保持原排序 选中所有列 逆透视,一步搞定 - 2 - 保持原排序:操作法一 思路直接,为保排序,操作麻烦 2.1 添加索引列 2.2 替换null值,避免逆透视时行丢失,后续无法排序 2.3 逆透视其他列 2.4 再添加索引列 2.5 对索引列取模(取模时输入参数为源表的列数,如3) 2.6 修改公式中的取模参数,使能适应增加列数的动态变化 2.7 再排序并删列 2.8 筛选掉原替换null的行
大海Power
2021/08/30
3.8K0
将Excel特定某列数据删除
我们之前将表单内的某列数据分到新的excel文件里,那么如何批量将新Excel文件这一特定列进行删除呢?
繁华是客
2023/03/03
2.2K0
QTableView 一列添加两个按钮
在QTableView的一列里添加两个按钮,之前添加一个按钮的思路是一样的,只是计算了一下按钮的宽,放两个按钮而已。 本例源代码:QtTowButtons.rar 看一下列的效果 看一下添加两个按钮的
lpxxn
2018/01/31
3.8K0
QTableView 一列添加两个按钮
分享两个用于告白的VB脚本程序
第二个还是个有语音朗诵文字的,可以用编辑器改为自己的话来表白,可以发给告白的人当做无法拒绝的程序。
兮动人
2021/06/11
1.2K0
psych +igraph:共表达网络构建
将0、6、12 h的count的table依次导入,分别计算这3个时间点的差异基因。
生信宝典
2019/05/09
2.5K0
psych +igraph:共表达网络构建
使用 Openbiox Hiplot (ORG) 在线开源绘图工具绘制发表级网络图
网络图是科学数据分析中最常用的图形之一。Openbiox Hiplot (ORG) 开源绘图工具在基础模块中提供了基于 igraph 的发表级网络图绘制功能 Network (igraph)。更复杂的网络图考虑使用 Cytoscape 进行绘制。
王诗翔呀
2023/02/28
8950
使用 Openbiox Hiplot (ORG) 在线开源绘图工具绘制发表级网络图
采用igraph包分析网络数据
对于网络的可视化和数据挖掘,有很多图形界面的软件可供选择,比如cytoscape, gephi 等等,这些软件使用方便,操作简单,功能的强大,但是同时也有着一个缺点,就是无法自动处理,只能通过人工点击鼠标来操作,对于大批量数据的分析而言,依靠人工费事费力。
生信修炼手册
2020/05/08
4.3K0
采用igraph包分析网络数据
将Albumentations用于语义分割任务
本文主要基于Using Albumentations for a semantic segmentation task的翻译修改,有少量修改,添加了一些个人理解批注。
烤粽子
2021/07/07
1.2K0
将Albumentations用于语义分割任务
我们如何将 Pinterest 的 iOS 应用大小减少 30% 以上
众所周知,应用程序的大小(下载大小 [1] [2])是非常重要的,并且在应用程序的大小和客户参与度之间存在关联。通常,人们会根据大小来决定是否使用软件,甚至以兆字节来支付带宽。更不用说,随着应用程序大小的增加,卸载率也会上升,这会导致用户试图释放设备上的磁盘空间。
深度学习与Python
2021/06/08
8480
我们如何将 Pinterest 的 iOS 应用大小减少 30% 以上
HPE将新的SimpliVity HCI用于边缘计算
HPE本周推出了SimpliVity 2600,称该设备是SimpliVity HCI系列中的“首个软件优化产品”。 2U系统最初是为运行虚拟桌面系统而构建的,但它的大小和计算能力使其成为“理想的边缘计算应用”,Doyle Research首席分析师Lee Doyle说。
SDNLAB
2018/07/30
1.1K0
HPE将新的SimpliVity HCI用于边缘计算
igraph包——绘制网络图
本文是复杂网络课的一个小作业,主要学习如何导入图数据以及如何利用igraph包绘制网络图。
庄闪闪
2021/04/09
2.6K0
技能 | R语言的igraph画社交关系图示例
R语言中的igraph可以很方便地画出社交关系图。下面是几个示例。 1.最简单的社交关系图 library(igraph) dolphin <- read.csv('dolphins.csv',head=T,fileEncoding='UTF-8',stringsAsFactors=F) g <- graph.data.frame(dolphin) jpeg(filename='dolphins.jpg',width=800,height=800,units='px') plot(g, vertex.siz
CDA数据分析师
2018/02/08
3.7K0
技能 | R语言的igraph画社交关系图示例
Java 19 将推出的两个新特性
文 | Travis 出品 | OSC开源社区(ID:oschina2013) JDK 18/Java 18 已于上个月发布,按计划 JDK 19 将于今年 9 月发布,日前官方提出了二个将于下个版本推出的特性。一个是 Vector API,另一个则是将 JDK 移植到 RISC-V。其中前者 Vector API 是一个表达向量计算的 API,它将在下一个 Java 版本中进行第四次孵化;后者提议的功能是将 JDK 移植到开源的 Linux/RISC-V 指令集架构(ISA)。 虽说 JDK 19
程序猿DD
2022/04/25
2380
Java 19 将推出的两个新特性
【R语言在最优化中的应用】igraph 包在图与网络分析中的应用
图与网络规划是近几十年来运筹学领域中发展迅速、而且十分灵活的一个分支。由于它对实际问题的描述,具有直观性,故广泛应用于物理学、化学、信息论、控制论、计算机科学、社会科学、以及现代经济管理科学等许多科学领域。图与网络分析的内容十分丰富,这里只介绍路径规划、网络流、最小生成树、旅行商等几个经典问题。
统计学家
2019/04/10
4.7K0
【R语言在最优化中的应用】igraph 包在图与网络分析中的应用
SQL如何将一个列中值内的逗号分割成另一列
例如某个列是这样的: 7890 – 20th Ave E Apt 2A, Seattle, VA 9012 W Capital Way, Tacoma, CA 5678 Old Redmond Rd, Fletcher, OK 3456 Coventry House Miner Rd, Richmond, TX
繁华是客
2023/03/03
2.1K0
R语言的igraph画社交关系图示例
作者|顾运筠 编辑按语 顾运筠是大数据文摘的热心读者,这是她看了大数据文摘的《用R语言进行数据可视化的综合指南(一)》和《用R语言进行数据可视化的综合指南(二)》后,结合正在coursera上的Data Visualization课程(https://www.coursera.org/course/datavisualization),写了这篇文章。在此,我们先表示感谢,同时也希望有更多热心的读者来稿,交流一下学习心得。 R语言中的igraph可以很方便地画出社交关系图。下面是几个示例。 1.最简单的社交关
大数据文摘
2018/05/21
2.5K0

相似问题

@UniqueConstraint用于两列以上

14

用于两个以上动态列的表单数据透视表

20

语句用于两个以上的条件

12

如何将委托方法用于两个以上的关联?

20

如何组合两个以上的列?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档