QT代码,重载函数d_func()声明形式分析和调用关系分析

2023-10-27

QT代码,重载函数d_func()声明形式分析和调用关系分析

#define X_DECLARE_PRIVATE(Class) \
    inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(xGetPtrHelper(d_ptr)); } \
    inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(xGetPtrHelper(d_ptr)); } \
    friend class Class##Private;
#include <stdio.h>

class A
{
public:
	A(int a)
	{
		giCnt = a;
	}

	inline int* d_func()
	{
		printf("111\n");
		return reinterpret_cast<int *>(&giCnt);
	}
       
    
	inline const int* d_func()
	{
		printf("222\n");
		return reinterpret_cast<const int *>(&giCnt);
	}
public:
	int giCnt;

};

int main()
{
	A a(4);
	int* d = a.d_func();
	return 0;
}

1、编译失败,函数返回值有区别,不构成重载,编译器认为是通一个函数,函数重定义,编译失败

#include <stdio.h>

class A
{
public:
	A(int a)
	{
		giCnt = a;
	}

	inline int* d_func()
	{
		printf("111\n");
		return reinterpret_cast<int *>(&giCnt);
	}
       
    
	inline int* d_func() const
	{
		printf("222\n");
		return reinterpret_cast<int *>(&giCnt);
	}
public:
	int giCnt;

};

int main()
{
	A a(4);
	int* d = a.d_func();
	return 0;
}

2、编译失败,失败信息如下:

error: reinterpret_cast from type ‘const int*’ to type ‘int*’ casts away qualifiers
   return reinterpret_cast< int *>(&giCnt);

当成员函数加上const后,该函数会将所有的成员变量前增加const属性处理,因此&giCnt为const int*的类型

#include <stdio.h>

class A
{
public:
	A(int a)
	{
		giCnt = a;
	}

	inline int* d_func()
	{
		printf("111\n");
		return reinterpret_cast<int *>(&giCnt);
	}

	inline const int* d_func() const
	{
		printf("222\n");
		return reinterpret_cast<const int *>(&giCnt);
	}
public:
	int giCnt;

};

int main()
{
	A a(4);
	a.d_func();
	const A b(3);
	b.d_func();
	return 0;
}

3、编译成功,输出结果:

111
222
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT代码,重载函数d_func()声明形式分析和调用关系分析 的相关文章

随机推荐

  • 四种信号量

    传送门 1 整型信号量 2 记录型信号量 3 AND型信号量 4 信号量集 例 应用信号量实现同步与互斥 说在前 信号量机制是对具体物理资源的抽象 同类资源的个数用 gt 0的信号量值来表示 0或1的则为临界资源 1 整型信号量 1 1 D
  • 自定义Weex组件——Weex的学习之路(八)

    在四月份和五月份的时候我用业余时间来学习weex 在这期间一直在看文档写demo 每一个组件都自己写demo运行一遍 我本人是做Android开发的 对JS CSS和Html有一定的了解 所以学习weex不是很难 然后我把自己所学的主要经历
  • 一种基于Harris-Laplace算法的角点检测方法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 Harris Laplace 检测方法原理 2 运行结果 3 Matlab代码实现 4 参考文献
  • 深度学习目标检测方法汇总

    目标检测简介 目标检测是计算机视觉的一个重要研究方向 是指从一个场景 或图片 中找到感兴趣的目标 任务大致分为三个流程 从场景中提取候选区 从候选区提取特征 识别候选区的类别并对有效的候选框进行位置精修 目标检测在生活的各个领域都有了广泛的
  • 算法 数列异或操作

    给你两个整数 n和start 其中n为数据的数量 start为第一个数据 当前数据定义为 num start 2 i i表示第几个数据 从0开始 请返回数列中所有数据按位异或 XOR 后得到的结果 示例 1 输入 n 5 start 0 输
  • Kali Linux 下搭建DVWA靶场和Sqli-labs注入环境

    Kali Linux 下搭建DVWA靶场和Sqli labs注入环境 DVWA靶场介绍 DVWA是一款基于PHP和mysql开发的web靶场练习平台 集成了常见的web漏洞如sql注入 xss 密码破解等常见漏洞 适合刚基础网络安全的小白
  • pytorch中的 relu、sigmoid、tanh、softplus 函数

    四种基本激励函数是需要掌握的 1 relu 线性整流函数 Rectified Linear Unit ReLU 又称修正线性单元 是一种人工神经网络中常用的激活函数 activation function 通常指代以斜坡函数及其变种为代表的
  • GMAC RGMII时序校准配置教程

    GMAC RGMII时序校准配置教程 在物联网时代 各种设备都需要联网 而其中以嵌入式系统为主 网络通信系统的核心部件即为MAC与PHY芯片 而针对MAC和PHY芯片之间的接口 有一种双数据率的接口标准 RGMII Reduced Giga
  • 一维数组与对象深拷贝的几种方法(指数组、对象中均无嵌套)

    一 万能for循环 直接上代码 var arr 1 2 3 4 5 var obj name aaaaa age 16 var arr2 copyThat arr var obj2 copyThat obj function copyTha
  • MySQL正确配置my.ini的event_scheduler = ON

    MySQL正确配置my ini的event scheduler ON 让事件的定时调度器常开 如下红框圈出部分 永久性设置方法 为何要在my ini中设置 补充mysql做一个event或job有关文章 让事件的定时调度器常开 如下红框圈出
  • 为什么数组的BUFFSIZE要定义为4096比较好?

    先看一个程序 page 69 include apue h define BUFFSIZE 4096 int main int argc char argv int n char buf BUFFSIZE while n read STDI
  • 高级计算机网络

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 RDT协议 rdt1 0 经完全可靠信道的可靠数据传输特点 rdt2 0 经具有比特差错信道的可靠数据传输 校验和 ACK NAK rdt2 1 考虑处理
  • swagger添加@ApiImplicitParams后出现错误 Required String parameter is not present

    swagger添加 ApiImplicitParams后出现错误 并且会报错 HTTP Status 400 Required String parameter xx is not present 原因是 要求post 但是 请求用的是ge
  • make编译kaldi时候遇到的各种错误

    文章目录 第一个问题 aclocal 1 14 command not found 第一个问题 aclocal 1 14 command not found tools openfst 1 6 7 missing line 81 acloc
  • line-height: 1; line-height: 100%;是什么意思

    先简单看个例子 css 页面 应该猜测出来了 line height 1 line height 100 font size 50px 把哪一个放到最后都是一样的 我理解的就是 等于字体高度的 1 整 份 或者 等于 字体高度的 100 高
  • 《这就是区块链》之区块链基础(5)--去中心化的意义

    在上一篇中 花了比较大的篇幅来阐述去中心化的概念 其实对于有计算机基础的朋友来讲 去中心化或者P2P网络并不是新颖的观点 但是 我还是希望本系列文章可以从基础展开 让所有的朋友都可以理解区块链的意义所在 今天我们来谈谈去中心化到底在区块链中
  • matlab的cylinder函数,Matlab基本函数-cylinder函数

    1 cylinder函数 绘制三维圆柱图 2 用法说明 1 x y z cylinder 函数返回一半径和高度都为1的圆柱体x y z轴的坐标值 圆柱体沿其周长有20个等距分布的点 2 x y z cylinder r 函数一个半径为r 高
  • 第十三章:软件项目管理

    第十三章 软件项目管理 一 软件项目管理总述 1 管理 管理是通过计划 组织和控制等一系列活动 合理地配置和使用各种资源 以达到既定目标的过程 2 软件项目管理 软件项目管理先于任何技术活动之前开始 并且贯穿于软件的整个生命周期之中 软件项
  • 关于新版Win10下安装虚拟机提示“Intel VT-x处于禁用状态”如何解决

    给电脑上安装虚拟机 安装的时候可能会遇到问题 提示 Intel VT x处于禁用状态 问题原因 出现这样的原因一般都是由于系统Virtualization Technology虚拟化技术功能 关闭导致的 解决方法 进入新版Win10的BIO
  • QT代码,重载函数d_func()声明形式分析和调用关系分析

    QT代码 重载函数d func 声明形式分析和调用关系分析 define X DECLARE PRIVATE Class inline Class Private d func return reinterpret cast