当前位置: 首页 > article >正文

尝试以底层角度,理解c++代码书写逻辑

大家好现在是4月10号下午6点7分又来写blog了废话不多说我来写写要将内容的大纲一由c转为c时写代码时出现的困惑二实验性理论开发之路三理论哈哈就三点还是要写很多内容的一由c转为c时写代码时出现的困惑不知道大家写c代码的时候有没有一种无力感以前c语言写代码都是随心所欲感觉没有什么限制到了c有了想法但是在实现代码的时候有一种无法下笔的感觉哈哈我也是在刚开始接触c时脑袋一片乱码尤其是什么sss(这个是namespace)::func()让我茫然 额………为啥要后来我才慢慢弄懂了为什么但是还是不放心为什么呢学习类和对象之时有时要又是又不要很烦啊以至于后面的模板string类愈发让我想要弄到它的核心好了进入第二个章节二实验性理论开发之路前提1、相同域才能够在代码处调用2、不同域语法允许以声明编译器从哪里找到检查3、编译器负责检查代码是否合法链接器直接将变量函数等等以项目大表来找函数/变量物理地址进行替换4、编译器完成链接器才开始工作5、声明/定义所写的域会一并给到项目大表的地址成为该地址的特征是重载函数的底层实现6、编译期结束也就是编译器工作完成才生成了完整的项目大表链接器才能够查表进行替换7、只有声明与定义结合才会生成有效的地址存入项目大表。所以函数/变量的声明与定义要在同一域编译器会检查8、一个cpp就是一个文件域9、编译器先检查字符是否拼写正确然后以函数入口开始按代码一行行检查10、调用有了声明编译器才会通过链接器才能够去查项目大表 声明对于编译器是很重要的代表我确实有这个东西这样链接期时链接器才有把握在项目大表里面有这个声明的实例的物理地址 声明有了编译器允许链接器才会在大表找到吧想要调用namespace空间的函数/变量怎么办简单 命名空间名字函数名/变量名这代表着向编译器声明是调用这个域的并且编译期的编译器只看域编译器以域来衡量一切由命名空间域-----类域类域为什么有public和private就是防止通过 声明 调用private函数或变量class mystring{public:void func();private:}大家想一想怎么调用func()?依据前面理论就mystring::func();但是c语法规定非static成员函数要传入this指针所以this-mystring::func(); a.mystring::func();你们可以自己去试试编译通过编译器没有检查出生命问题但是主流编译器同样更推荐怎么写a.func()这样跟精简 但是失去了底层编译器自动加上了不信我尝试看汇编语言也是这么写的call mystring::func() 函数地址后面再传入this指针即可传this指针和声明域是独立的但是c语法将它们并为一起所以调用成员函数可以直接写为a.func();后面依据我的观察与实现仅有调用成员函数和语法糖 不用写声明域好了现在来到声明与定义这么才能合法的写函数/变量声明和定义声明与定义结合我就不多赘述了讲讲声明与定义分离成员函数的声明与定义分离class string{public:void func();//声明}void string::func(){//定义}就这样定义声明了是string这个类域里面的所以声明与定义是同一域相互结合生成有效物理地址好了我的理论也差不多结束了三理论1、编译期时编译器先检查整体的拼写后以main函数入口逐行检查代码2、对于调用编译器会优先去找它的声明找到了就抛给链接期的链接器它应该能够找到其声明与定义结合还带有域属性的物理地址替换3、不同域不能够直接调用调用代码域与声明域不同就是编译器找不到声明在哪里要配合声明我调用的是哪个域的函数/变量要不然编译器找不到声明在哪里编译器就是要找到其来源声明剩下交给链接器4、对于语法糖和成员函数调用编译器会在汇编语言处自动加上域声明能够找到声明所以不用自己手动加上域声明欧克了这篇文章完成了现在是晚上7点40下篇文章再见谢谢各位读者的耐心观看 以后会慢慢改进文章编写能力的祝大家事业有成

相关文章:

尝试以底层角度,理解c++代码书写逻辑

大家好,现在是4月10号下午6点7分,又来写blog了!废话不多说,我来写写要将内容的大纲:一:由c转为c时,写代码时出现的困惑二:实验性理论开发之路三:理论哈哈,就三…...

WeChatMsg完整教程:微信聊天记录永久保存与深度分析终极指南

WeChatMsg完整教程:微信聊天记录永久保存与深度分析终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

前端状态管理:别让你的应用状态一团糟

前端状态管理:别让你的应用状态一团糟 什么是前端状态管理? 前端状态管理是指管理前端应用中数据状态的方法和工具。别以为状态管理只是简单的变量存储,复杂的应用状态管理不当会让你的代码变成一团糟。 为什么需要状态管理? 统一…...

新手必看:Qwen3-Reranker-0.6B部署避坑指南与常见问题

新手必看:Qwen3-Reranker-0.6B部署避坑指南与常见问题 1. 为什么选择Qwen3-Reranker-0.6B 1.1 轻量高效的语义重排序模型 Qwen3-Reranker-0.6B是阿里云推出的轻量级重排序模型,仅有0.6B参数(约6亿),但性能表现优异。…...

996引擎 - [开发辅助] 利用 robocopy 同步项目 dev 文件夹

996引擎 - [开发辅助] 利用 robocopy 同步项目 dev 文件夹 代码 git 管,资源统一放内网服务器。 使用以下脚本同步 岗位 同步方向 需求 策划 本地 >>> 内网服务器 提交资源 美术 本地 >>> 内网服务器 提交资源 程序 内网服务器 >>> 本地 拉取资源 …...

AI直播背景替换终极指南:OBS智能抠像插件完整教程

AI直播背景替换终极指南:OBS智能抠像插件完整教程 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://gitc…...

如何用ExifToolGUI解决数字照片元数据管理难题:5个专业工作流优化方案

如何用ExifToolGUI解决数字照片元数据管理难题:5个专业工作流优化方案 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui ExifToolGUI是一款基于ExifTool的图形化元数据管理工具,专为摄…...

【UE4/UE5 萌新向】有C++基础如何快速入门虚幻引擎?超详细图文全揭秘!

观众老爷们大家好 我是邪修KING 欢迎来到我的TA->UE游戏引擎博客—入门篇! C!高门槛!精选学习!前言 如果你和我一样,刚刚啃完了C语言、数据结构,并且掌握了C的类和对象和STL,现在看着电脑里刚…...

我试了四种去除 Gemini 水印的方法,整理成一篇实用对比野

认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...

JDK 21最新版安装配置全攻略:从Oracle账户获取到环境变量设置(附可用共享账号)

JDK 21高效安装与深度配置实战指南 Java开发环境的搭建是每位开发者入门的必修课,但Oracle官网的账户限制和复杂的配置流程常常让新手望而却步。本文将彻底解决这些问题,不仅提供绕过Oracle登录限制的实用方案,还会深入解析环境变量配置的底层…...

AI原生研发运维自动化成熟度评估矩阵(CMMI-AIOps 2.1版):含19项量化指标、自测工具包与TOP3瓶颈突破路线图

第一章:AI原生研发运维自动化成熟度评估矩阵(CMMI-AIOps 2.1版)概览 2026奇点智能技术大会(https://ml-summit.org) CMMI-AIOps 2.1版是面向AI原生系统全生命周期的评估框架,聚焦模型开发、训练调度、推理服务、可观测性治理与自…...

SEAL: Enhancing Multimodal LLMs with Dynamic Visual Search for High-Resolution Image Understanding

1. 为什么高分辨率图像理解对多模态大模型如此重要? 想象一下你正在用手机查看一张4000万像素的旅游照片,试图找出远处山脚下的小木屋。人类可以自然地通过视觉搜索机制——先扫描整体景观,再逐步聚焦到特定区域——快速定位目标。但现有的多…...

OpenClaw 飞书机器人对接教程,零基础一步到位

前言 OpenClaw(小龙虾)v2.6.0版本支持飞书机器人对接,完成配置后,可直接在飞书聊天窗口向机器人发送自然语言指令,由OpenClaw自动拆解任务、操控电脑执行操作,实现飞书端远程下达AI任务的效果。 OpenClaw…...

墨语灵犀处理403 Forbidden错误:智能排查与解决方案生成

墨语灵犀处理403 Forbidden错误:智能排查与解决方案生成 遇到网站打不开,显示“403 Forbidden”,是不是感觉有点懵?这个错误在运维和开发中太常见了,它就像一道“禁止入内”的门,告诉你服务器收到了请求&a…...

p-stable LSH与E2LSH:从理论到实践的欧氏空间近似最近邻搜索

1. 当高维数据遇上最近邻搜索:从暴力破解到LSH 想象一下,你手里有一张包含100万张图片的数据集,每张图片都被表示成4096维的特征向量。现在用户上传了一张新图片,你需要快速找到数据集中与它最相似的10张图片。如果采用暴力搜索&a…...

ArchivePasswordTestTool技术深度解析:基于7zip引擎的自动化密码测试架构实现

ArchivePasswordTestTool技术深度解析:基于7zip引擎的自动化密码测试架构实现 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 在…...

mPLUG零售分析:消费者行为视觉识别方案

mPLUG零售分析:消费者行为视觉识别方案 1. 引言 走进任何一家零售门店,你是否曾好奇:顾客进门后往哪里走?他们在哪个货架前停留最久?哪些商品被拿起又放下?这些看似简单的行为背后,隐藏着消费…...

Overleaf上LaTeX Beamer字体自定义实战:手把手教你用fontspec包搞定中文和英文字体

Overleaf平台LaTeX Beamer字体定制全攻略:从基础配置到高级技巧 在学术报告和教学演示领域,LaTeX Beamer因其专业的排版质量和稳定的输出效果而备受青睐。然而,当涉及到中英混排场景时,许多用户都会遇到字体配置的挑战——如何让中…...

OpenCore引导菜单深度解析:从单调文本到专业图形界面的进阶调优

OpenCore引导菜单深度解析:从单调文本到专业图形界面的进阶调优 【免费下载链接】OpenCore-Install-Guide Repo for the OpenCore Install Guide 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Install-Guide OpenCore作为现代黑苹果引导方案的核心…...

从‘单向导电’到‘电流引导’:重新理解GPIO保护二极管的真实工作模式

从‘单向导电’到‘电流引导’:重新理解GPIO保护二极管的真实工作模式 在嵌入式硬件设计中,GPIO保护二极管常被简化为"防反接开关"的角色,这种认知掩盖了其作为动态电流路径选择器的本质。当我们用阻抗网络和分流原理重新审视这个经…...

Android集成chineseocr_lite实战:4.7M超轻量级中文OCR完整指南

Android集成chineseocr_lite实战:4.7M超轻量级中文OCR完整指南 【免费下载链接】chineseocr_lite 超轻量级中文ocr,支持竖排文字识别, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) crnn(2.5M) anglenet(378KB)) 总模型仅4.7M 项目地址: https://gitcode.…...

解决Bootstrap项目中日期时间选择难题:bootstrap-datetimepicker深度集成指南

解决Bootstrap项目中日期时间选择难题:bootstrap-datetimepicker深度集成指南 【免费下载链接】bootstrap-datetimepicker 项目地址: https://gitcode.com/gh_mirrors/boo/bootstrap-datetimepicker 在Bootstrap项目开发中,日期时间选择器是表单…...

STM32实战指南_打造智能厨房安全卫士(硬件选型+代码解析+调试技巧)

1. 项目背景与需求分析 厨房是家庭安全隐患的高发区域,尤其是燃气泄漏和高温引发的安全问题。去年我邻居家就因燃气阀门未关紧导致轻微中毒,这件事让我下定决心开发一个低成本、高可靠性的厨房安全监测系统。基于STM32的方案不仅成本可控(整…...

Vivado里用Block Memory Generator搞个双端口RAM,这5个坑我帮你踩过了

Vivado双端口RAM配置实战:Block Memory Generator避坑指南 在FPGA开发中,高效利用片上存储资源是提升系统性能的关键。Xilinx Vivado提供的Block Memory Generator(BMG)IP核能够快速生成优化的存储结构,但其中双端口RA…...

Legacy iOS Kit:让旧款iPhone/iPad重获新生的终极降级工具

Legacy iOS Kit:让旧款iPhone/iPad重获新生的终极降级工具 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...

Qwen3智能字幕系统部署案例:中小企业视频号运营字幕自动化方案

Qwen3智能字幕系统部署案例:中小企业视频号运营字幕自动化方案 1. 引言:视频运营的字幕痛点与解决方案 在短视频内容爆发的时代,中小企业视频号运营面临一个共同难题:字幕制作。传统手动添加字幕的方式不仅耗时耗力,…...

手把手教你用STM32F103C8T6和HC-06蓝牙模块,实现手机App远程控制LED灯

从零搭建STM32蓝牙LED控制系统:硬件连接、代码解析与手机端交互全指南 当你第一次看到手机App能远程控制LED灯亮灭时,那种"科技魔法成真"的兴奋感,正是嵌入式开发的魅力所在。本文将带你用最常见的STM32F103C8T6开发板(…...

Win10环境下GY8508 CAN总线驱动安装全流程与哈希值校验绕过技巧

1. GY8508 CAN总线驱动安装前的准备工作 在工业自动化领域,GY8508 CAN总线设备是常见的通信接口模块。但在Windows 10系统上安装驱动时,很多工程师都会遇到哈希值校验失败的问题。我去年在给某汽车生产线调试设备时就遇到过这个坑,折腾了大半…...

【文献分享】CONCERT 在空间转录组学中预测了针对特定领域的扰动反应

文章目录介绍代码参考介绍 空间扰动转录组学用于测量基因或化学修饰如何改变基因表达,同时保持组织环境的完整性。扰动的结果取决于细胞的内在状态,也取决于这些影响在细胞微环境中的传播方式。 我们推出了 CONCERT 这款针对特定区域的生成模型&#xf…...

matlab 点云体素中心最近邻点下采样(详细过程版)

目录 一、算法原理 1、实现过程 二、代码实现 三、结果展示 博客长期更新,本文最近一次更新时间为:2026年4月10日。 一、算法原理 1、实现过程 点云体素最近邻点滤波核心思想是通过空间网格化,在每个网格(体素)内仅保留一个最具代表性的点,以达到简化点云、减少数据量的…...