4.1.3 名称的特殊处理

news2025/1/12 21:00:49

名称的特殊处理

类成员变量的名称处理:
对于类的数据成员,其的名称经过编译器的处理会在程序员定义名称的后面再加上class的名称,进而形成独一无二的命名,例如下面的的成员变量x再经过类处理后有可能为x_7Point3d

class Point3d {
private:
    double x{};
};

编译器之所以这么做,原因在于对于如下的派生操作,编译器内部形成的伪码可能如下注释的伪码所示。这样不管需要取哪一个x,通过name mangling处理后,都可以绝对清楚的指出。

class Point4d:public Point3d{
private:
    double x;
};

// class Point4d{
// private:
//     double x_7Point3d;
//     double x_7Point4d;
// };

类函数对象的名称处理:
但是由于类成员函数支持重载,所以不能像上述对成员变量的处理一样只加上类名,需要加上额外的一些参数。对于一个类成员函数而言,其全局名称由类名、函数名称、参数个数、参数类型共同决定。
例如如下的函数,通过g++编译运行结果会指示类成员函数的地址为0x4011a2。通过nm命令查看编译后的二进制文件,可以发现在ox4011a2出存储的函数名为_ZNK7Point3d9normalizeEv,这即是通过name mangling得到的结果,但是因为目前没有统一的标准,因此不同编译器的处理方法会不太一样。
Alt

Alt

Alt

Point3d p(1, 2, 3);
auto p2 = p.normalize();
printf("成员函数normalize的地址: %p\n", &Point3d::normalize);

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

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

相关文章

Linux之手把手教你捋清楚make和makefile

文章目录背景简单介绍make和makefile依赖关系和依赖方法项目清理以及伪目标背景 以往的C语言编程,我们一般都在一些像VS2019这样的集成开发环境(IDE)下编写,一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中&#xff0…

Spring框架的概述及基本应用

Spring的基本应用 文章目录Spring的基本应用1. Spring 概述1.1 什么是Spring1.2 Spring 框架的优点1.3 Spring的体系结构2. Spring的核心容器2.1 BeanFactory2.2 ApplicationContext3. Spring的入门程序3.1 在pom下利用maven导入Spring所需要的jar包3.2 简单搭建起demo结构3.3 …

Java中数组的定义与使用(Java系列3)

目录 前言: 1.什么是数组 2.数组的创建 3.数组的初始化 4.数组的使用 5.数组是引用类型 6.基本类型变量与引用类型变量的区别 7.数组的应用 8.二维数组 结束语: 前言: 前面小编与大家分享了C语言与Java中的区别,还有一…

leaflet教程041: Point 和 LatLng 坐标互相转换

第041个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中使用Point和LatLng,这里做了两者之间的转换。 注意 两者转换后的值,返回相对于原点像素的相应像素坐标或经纬度坐标。zoom改变,原点(地图图层左上角的投影像素坐标)的值会改变,所以获得的值也会变化。…

51单片机学习笔记1 简介及开发环境

51单片机学习笔记1 简介及开发环境一、51单片机1. STC89C52单片机简介2. 命名规则3. 封装(1)PDIP(2)LQFP(3)PLCC(4)PQFP二、STC8051结构1. STC 8051 内部结构图2. 内部结构框图3. 单…

Android设置TabLayout熟悉及下划线宽度

Tablayout的使用 属性 app:tabMod 设置Tab模式 app:tabTextColor 设置文本颜色 app:tabSelectedTextColor 设置选中文本颜色 app:tabIndicatorColor 设置下滑条颜色 app:tabMaxWidth“xxdp” 设置最大的tab宽度 app:tabMinWidth“xxdp” 设置…

牛客网之SQL100题(7)-字符串截取、切割、删除、替换

知识点: (1)substring_indexsubstring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:计数 (2)切割、截取、删除、替换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 select -- 替换法 replace(string, 被…

类型转换C11

类型转换 C类型转换分为显式类型转换和隐式类型转换 ,隐式类型转换由编译器自动完成,这里只讨论显式类型转换。 旧式风格的类型转换 type(expr); // 函数形式的强制类型转换 (type)expr; // C语言风格的强制类型转换现代C风格的类型转换 cast-name&l…

1-2 VMware安装Rocky9.0和Ubuntu22.04系统

文章目录前言下载链接VMware使用安装Rocky9.0系统Rocky初始化安装Ubuntu22.04系统Ubuntu初始化VMware快照前言 VMware虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。 Rocky Linux 9.0 操作系统与2022年7月14…

基于matlab GUI的数字图像处理系统

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景及意义 1 1.2国内外研究现状 2 1.2.1国内研究现状 2 1.2.2国外研究现状 3 1.3研究主要内容 3 第2章 数字图像处理系统设计 5 2.1设计概括 5 2.2文件 6 2.2.1打开 6 2.2.2保存 6 2.2.3退出 6 2.3图像变形 7 2.3.1图像缩放 7 …

Spring Cloud Gateway 使用示例

Spring Cloud Gateway 使用示例 作者: Grey 原文地址: 博客园:Spring Cloud Gateway 使用示例 CSDN:Spring Cloud Gateway 使用示例 说明 Spring Cloud Gateway 用于构建 API 网关,基于 Spring WebFlux。 在Spr…

【雷达通信】回波数据处理(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

【VRP问题】基于蚁群算法求解配送路径最短问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

静态成员函数与回调函数

1. 静态成员函数 1.1 静态成员函数调用 如何代码块里的函数get_object_count是静态成员函数,对静态成员函数无论是通过类名还是通过对象或对象指针调用,最终都会被编译器转换为全局非成员函数的调用。例如obj.get_object_count()或Point3d::get_object…

BigDecimal精度丢失问题

浅谈BigDecimal精度丢失问题 文章目录浅谈BigDecimal精度丢失问题一. 简介二. 错误使用三. 原因分析四. 正确使用一. 简介 ​ Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数&#…

大数据Kudu(二):Kudu架构

文章目录 Kudu架构 一、​​​​​​​Kudu存储模型及概念 二、​​​​​​​​​​​​​​Kudu table存储原理 Kudu架构 一、​​​​​​​Kudu存储模型及概念 Kudu有自己的数据存储模型,不依赖于HDFS、Hive、HBase其他大数据组件。Kudu有自己的集群&#…

Oracle存储过程入门教程(通俗理解存储过程)

Oracle存储过程入门通俗介绍一、存储过程通俗理解二、创建存储过程基本语法(汇总)三、执行存储过程的方式(5种)四、网上现有的创建存储过程的两种方式解释(看注释)五、一些存储过程示例(仅供参考)六、其他语…

蒸馏+Distilling Knowledge via Knowledge Review论文笔记

文章目录一、前言二、蒸馏1.背景介绍2.知识蒸馏和迁移学习之间的区别3.Hinton提出的知识蒸馏Pipeline4.蒸馏的知识形式5.知识蒸馏的方法三、Distilling Knowledge via Knowledge Review论文笔记1.思想介绍2.Pipeline3.实验结果参考文献一、前言 近期在阅读cvpr 2021的一篇关于蒸…

通过Tomcat / Small Tomcat,如何部署Servlet?(超详细)

目录 基于Tomcat对Servlet进行部署 一、创建项目 二、引入Servlet依赖 三、构建目录结构 四、编写代码 五、打包程序 六、部署程序 七、验证程序 基于Smart Tomcat对Servlet进行部署 第一步:下载Smart Tomcat插件 第二步:进行相关配置 第三步…

【Unity3D】选中物体描边特效

1 前言 描边的难点在于如何检测和识别边缘,当前实现描边特效的方法主要有以下几种: 1)基于顶点膨胀的描边方法 在 SubShader 中开 2 个 Pass 渲染通道,第一个 Pass 通道渲染膨胀的顶点,即将顶点坐标沿着法线方向向外扩…