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

C++复习录

1.命名空间namespace nn{ int a; }//名字空间指令 using namespace nn;//从这行代码开始,nn中的标识符在当前作用域可见(位于可见表) //名字空间声明 using nn::a;//从这行代码开始,nn中的a引入当前作用域(相当于定义,位于定义表)gcc/g++针对每个函数都和制作两张表,定义表和可见表。编译器先从定义表中找标识符,再到可见表中找。//名字空间别名 namespace nn_3=nn::nn1::nn2;2.函数重载#include iostream #include cstring using namespace std; // C++编译器(例如:g++),会更改我们书写的函数名 void foo( char* c, short s ) { // 完全匹配 cout "1. foo" endl; } void foo( const char* c, short s ) { // 常量转换 cout "2. foo" endl; } void foo( char* c, int s ) { // 升级转换 cout "3. foo" endl; } void foo( char* c, char s ) { // 标准转换 cout "4. foo" endl; } void foo( ... ) { // 省略号匹配(可变长参数) cout "5. foo" endl; } int main( void ) { char * c; short s; foo( c, s ); // _Z3fooPcs( c, s ); 普通方式调用重载关系的函数时,根据 实参的类型 来确定到底调用哪个foo void(*pfunc)( const char*, short ) = foo; // _Z3fooPKcs pfunc( c, s ); // 函数指针方式调用重载关系的函数时,根据 函数指针的类型 来确定到底调用哪个foo return 0; }调用优先级:完全匹配常量转换升级转换标准转换 自定义转换省略号匹配升级转换:没有信息损失的转换,小类型往大类型上转。标准转换:可能有信息的损失的转换,大类型往小类型上转。c++标准规定,函数都要换名。但是换名规则都不相同。linux:nm查看最终文件的符号表:nm a.out_Z:程序员自己定义的函数都这样开头3:定义函数名字的长度foo:自己定义的函数名字Pcs:形参表信息,P:pointer,c:char,Pc:char*,i:int,s:short,K:const,z:省略号。extern "C"{ int sum(){} int sub(){} }通过extern "C" 可以要求c++编译器按照c方式编译函数,即不做换名,当然也就无法重载。3.哑元函数只指定形参类型而不指定形参名称的函数,谓之哑元 保证函数的向下兼容。 形成函数的重载版本4.内联函数内联就是用函数已被编译好的二进制代码,替换对该函数的调用指令。内联在保证函数特性的同时,避免了函数调用的时间开销。inline关键字仅表示期望该函数被优化为内联,但是否适合内联则完全由编译器决定。稀少被调用的复杂函数和递归函数都不适合内联#include iostream using namespace std; // 内联函数 : 编译器的优化策略 void foo( int x ) { // 普通函数 cout "foo(int):" x endl; } inline void bar( int x ) { // 内联函数 cout "bar(int):" x endl; } #define PRINT(X) cout "PRINT(X):" X endl; int main( void ) { foo( 10 ); // 将此处 调用语句 替换为 跳转指令 foo( 20 ); // ... foo( 30 ); // ... bar( 10 ); // 将此处 调用语句 替换为 bar函数编译后产生的二进制指令集 bar( 20 ); // ... bar( 30 ); // ... PRINT(10); // 预编译阶段,做纯文本替换,正式编译阶段再将纯文本内容翻译为二进制指令集 PRINT(20); // ... PRINT(30); // ... return 0; }5.动态内存分配标准C库函数:malloc/freeC++:new/delete操作符int* pi = new int;//int告诉new申请几个字的操作符,返回值直接是指针 delete pi; int* pi = new int(100);//分配内存时同时初始化 //以数组方式new的也要以数组方式delete int* pi = new int [4]{1,2,3,4};//返回的永远是第一个元素的地址 delete[] pi;数组方式会多申请一块内存在第一个元素前,用来存数组个数,[]的作用是把多申请出来的内存释放掉。多维数组当一维数组看,new多维数组返回第一个元素的指针,即一维数组的指针。int (*p)[4] = new int[3][4]; delete[] p;//永远申请4个字节存放数组个数#include iostream #include cstdlib using namespace std; // 动态(堆)内存分配 int main( void ) { int* pm = (int*)malloc( 4 ); cout "*pm=" *pm endl; free( pm ); // 当这行代码执行结束,pm指向的堆内存已经被释放,pm变为野指针 pm = NULL; free( pm ); // 给free传递的参数为野指针,释放野指针后果未定义,释放空指针是安全的 int* pn = new int(100); cout "*pn=" *pn endl; delete pn; // 当这行代码执行结束,pn指向的堆内存已经被释放,pn变为野指针 pn = NULL; delete pn; // 给得了特传递的为野指针,delete野指针后果未定义,delete空指针是安全的 int* parr = new int[4]{ 10, 20, 30, 40 }; // 如果以数组方式new一块堆内存,返回的永远是 第一个元素的地址 for( int i=0; i4; i++ ) { cout parr[i] ' '; } cout endl; delete[] parr; // 数组方式new的,也要以数组方式delete int(*p)[4] = new int[3][4]; // 返回值是什么类型指针 delete[] p; try { new int[0xFFFFFFFF]; } catch( ... ) { } return 0; }new操作符申请内存失败,将抛出异常6.左值和右值左值:能够取地址的 右值:不能取地址的#include iostream using namespace std; // 左值 和 右值 int foo( ) { int m = 100; return m; } int main( void ) { // 函数的生命期 // 具名内存--能够取址--左值|非常左值(无const修饰) // |常左值 (有const修饰) int a = 10; a; a = 20; const int b = 10; b; // b = 20; // 语句级生命期 // 匿名内存--不能取址--右值|直接更改右值毫无意义(98/03标准给出的结论) // 10; // 10; // 10 = 20; /*|100|*/foo( ); // (1) 生成跳转指令 (2)分配一块内存空间 // foo( ); // foo( ) = 200; return 0; }7.引用前没有类型是取地址,前有类型是起别名。引用本身不占内存,对引用的所有操作都是在目标内存进行操作。引用必须初始化,且不能更换目标。int a = 10;int b=a;不存在引用的引用引用的常属性须和目标的常属性一致。const int e = 10; int f = e;//ERROR const int g = e;//OK可以限定更加严格int a = 10; const int b = a;//OKint r = 10;//ERROR,右值更改毫无意义所以不让改。 const int r = 10;//加const可以。 int r = foo();//ERROR,同理 const int r = foo();//OK带const的引用可以引用常左值,非常左值,右值。常引用即万能引用。引用可以延长右值的生命期。引用的生命周期不能长于目标引用型的返回值,从函数中返回引用,一定要保证在函数返回以后,该引用的目标依然有效。#include iostream using namespace std; // 引用 作为 函数的返回值 int g_value = 0; int foo( ) { // 非常引用型 返回值,通过其可以修改目标内存 return g_value; } const int fooo( ) { // 常引用型 返回值,通过其不可以修改目标内存 return g_value; } int bar( ) { static int s_value = 0; // 这句代码程序启动时就执行,而且只执行一次,不是每次调用bar函数执行 cout "s_value=" s_value endl; return s_value; } int hum( ) { int* pi = new int; return *pi; } int fun( int x ) { return x; } /* int boo( ) { int m = 8888; return m; // 返回局部变量的引用(别名) } */ int main( void ) { foo( ) = 100;//foo()是g_value的别名 cout "g_value=" g_value endl; fooo() = 6666;//error,不能改常引用型返回值 bar( ) = 200; bar( ); hum( ) = 300; int a_value = 0; fun( a_value ) = 400; cout "a_value=" a_value endl; // boo( ); return 0; }8.引用与指针的区别#include iostream using namespace std; // 引用 和 指针 的差别 int main( void ) { int a=10, b=20; int* pa = a; // 指针 可以随意变更其所指向的内存 pa = b; int ra = a; // 引用 不可以变更其所指向的内存 ra = b; pa = NULL; // 存在空指针 // ra = NULL; // error,不存在空引用 int** ppa = pa; // 存在二级指针 // int

相关文章:

C++复习录

1.命名空间 namespace nn{int a; } //名字空间指令 using namespace nn;//从这行代码开始,nn中的标识符在当前作用域可见(位于可见表)//名字空间声明 using nn::a;//从这行代码开始,nn中的a引入当前作用域(相当于定义,位于定义表) gcc/g++针对每个函数都和制作两张表,…...

终极免费虚拟光驱指南:如何在Windows上轻松挂载ISO文件

终极免费虚拟光驱指南:如何在Windows上轻松挂载ISO文件 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu 在数字时代,我们不再需要物理光驱来读取光盘内容,但ISO、NRG、MDS等光盘映像文件仍然无处不…...

开源工具助力数字内容管理:跨平台音频下载解决方案

开源工具助力数字内容管理:跨平台音频下载解决方案 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字内容爆炸的时…...

.NET源码生成器基于partial范式开发和nuget打包塘

1 安装与初始化 # 全局安装 OpenSpec npm install -g fission-ai/openspeclatest # 在项目目录下初始化 cd /path/to/your-project openspec init 初始化时,OpenSpec 会提示你选择使用的 AI 工具(Claude Code、Cursor、Trae、Qoder 等)。 3 O…...

OpenAI呼吁重新审视税收政策,迎接AI带来的新经济时代

ChatGPT的开发商OpenAI近日呼吁政策制定者重新思考税收体系的结构,并提出了一系列针对人工智能潜在经济与社会影响的政策建议。在周一发布的一份政策文件中,OpenAI表示,AI可能从根本上重塑经济格局,其中包括若干潜在风险&#xff…...

Swoole + Redis Cluster 实时推送系统(千万级QPS压测实录+全链路监控配置清单)

第一章:Swoole Redis Cluster 实时推送系统概览现代高并发实时推送场景(如聊天消息、行情更新、协同编辑)对系统吞吐量、低延迟与水平扩展能力提出严苛要求。本系统以 Swoole 作为高性能异步协程服务器核心,结合 Redis Cluster 提…...

Carsim与Simulink联合仿真模型——AEB的cpar文件、simulink模型文件及...

Carsim与Simulink联合仿真模型——AEB 提供cpar文件,simulink模型文件,模型搭建过程文档在汽车开发领域,安全系统始终占据着举足轻重的地位。其中,主动安全辅助系统(AEB)作为现代汽车的安全核心&#xff0c…...

Blynk物联网开发:从零到一的完整高效解决方案

Blynk物联网开发:从零到一的完整高效解决方案 【免费下载链接】blynk-library Blynk library for IoT boards. Works with Arduino, ESP32, ESP8266, Raspberry Pi, Particle, ARM Mbed, etc. 项目地址: https://gitcode.com/gh_mirrors/bl/blynk-library Bl…...

react-native-fetch-blob完整教程:从零开始掌握文件上传下载

react-native-fetch-blob完整教程:从零开始掌握文件上传下载 【免费下载链接】react-native-fetch-blob A project committed to making file access and data transfer easier, efficient for React Native developers. 项目地址: https://gitcode.com/gh_mirror…...

Linux Docker 安装与使用详细教程

一、Docker 概述 1.1 什么是 Docker? Docker 是一个开源的应用容器引擎,基于 Go 语言开发并遵从 Apache2.0 协议开源。它可以让开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,实现虚…...

Phi-4-mini-reasoning推理模型快速入门:Docker一键部署全攻略

Phi-4-mini-reasoning推理模型快速入门:Docker一键部署全攻略 1. 认识Phi-4-mini-reasoning推理模型 Phi-4-mini-reasoning是微软推出的轻量级开源推理模型,专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个3.8B参数的模型虽然体积小巧&#x…...

Browser.html快速入门:5分钟搭建你的第一个HTML浏览器

Browser.html快速入门:5分钟搭建你的第一个HTML浏览器 【免费下载链接】browserhtml Experimental Servo browser built in HTML 项目地址: https://gitcode.com/gh_mirrors/br/browserhtml Browser.html是一个基于HTML构建的实验性浏览器项目,它…...

如何快速入门网络自动化:awesome-network-automation新手教程

如何快速入门网络自动化:awesome-network-automation新手教程 【免费下载链接】awesome-network-automation Curated Awesome list about Network Automation 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-network-automation 网络自动化是网络基础…...

革命性文件传输神器react-native-fetch-blob:告别BASE64性能瓶颈的终极指南

革命性文件传输神器react-native-fetch-blob:告别BASE64性能瓶颈的终极指南 【免费下载链接】react-native-fetch-blob A project committed to making file access and data transfer easier, efficient for React Native developers. 项目地址: https://gitcode…...

Scio REPL交互式编程:快速原型开发和数据分析的终极指南

Scio REPL交互式编程:快速原型开发和数据分析的终极指南 【免费下载链接】scio A Scala API for Apache Beam and Google Cloud Dataflow. 项目地址: https://gitcode.com/gh_mirrors/sc/scio Scio REPL交互式编程是Apache Beam和Google Cloud Dataflow的Sca…...

FastAPI子应用挂载:别再让root_path坑你一夜舶

Julia(julialang.org)由Stefan Karpinski、Jeff Bezanson等在2009年创建,目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是: 高性能:编译型语言(JIT&#xff0…...

Scio与Google Cloud Dataflow集成:构建可扩展大数据解决方案

Scio与Google Cloud Dataflow集成:构建可扩展大数据解决方案 【免费下载链接】scio A Scala API for Apache Beam and Google Cloud Dataflow. 项目地址: https://gitcode.com/gh_mirrors/sc/scio Scio是一个基于Apache Beam的Scala API,专为Goog…...

终极指南:如何构建高可用AITemplate推理服务的跨区域灾备方案

终极指南:如何构建高可用AITemplate推理服务的跨区域灾备方案 【免费下载链接】AITemplate AITemplate is a Python framework which renders neural network into high performance CUDA/HIP C code. Specialized for FP16 TensorCore (NVIDIA GPU) and MatrixCore…...

GPT-6 Spud倒计时×AI格局变局:2026年4月第一周全景扫描

上一篇 OpenClaw生态模型使用量全景:国产模型主导12.96万亿Token时代 下一篇 GPT-6 Spud深度解析:Symphony架构、双系统推理与OpenAI的AGI豪赌 摘要 2026年4月第一周(3月31日至4月6日),AI行业迎来密集动态&#xff1a…...

Outlook无法添加共享邮箱怎么办?一篇文章教你完成共享邮箱添加与发送配置

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

Redis命令处理机制源码探究疗

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储,而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码,常规方式只能重新配置连接,效率极低。本项目只作为学习研究使用,不做其他…...

三步解决Fiji在macOS系统的启动故障问题

三步解决Fiji在macOS系统的启动故障问题 【免费下载链接】fiji A "batteries-included" distribution of ImageJ :battery: 项目地址: https://gitcode.com/gh_mirrors/fi/fiji Fiji作为ImageJ的"开箱即用"发行版,整合了大量生物图像处理…...

如何打造终极纯净阅读体验:ReadCat免费开源小说阅读器完整指南

如何打造终极纯净阅读体验:ReadCat免费开源小说阅读器完整指南 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在数字阅读应用泛滥的今天,ReadCat免费开源小说…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具蚕

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储,而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码,常规方式只能重新配置连接,效率极低。本项目只作为学习研究使用,不做其他…...

使用Spring AI Alibaba构建智能体Agent倥

背景 在软件开发的漫长旅途中,"构建"这个词往往让人又爱又恨。爱的是,一键点击,代码变成产品,那是程序员最迷人的时刻;恨的是,维护那一堆乱糟糟的构建脚本,简直是噩梦。 在很多项目中…...

PHP 8.9 JIT调试稀缺资源包首发:含自研jit-trace-analyzer工具链、12个真实微服务JIT崩溃core dump样本(限前500名下载)

第一章:PHP 8.9 JIT调试稀缺资源包发布说明 PHP 社区正式发布首个面向 PHP 8.9(开发代号“Vesuvius”)的 JIT 调试资源包(JIT Debug Resource Pack, JD-RP v0.1.0),专为深度分析 OPCache JIT 编译行为、寄存…...

OpCore-Simplify:零基础也能轻松制作黑苹果EFI的终极指南

OpCore-Simplify:零基础也能轻松制作黑苹果EFI的终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而烦恼吗…...

League-Toolkit:英雄联盟客户端终极自动化工具与数据分析平台完整指南

League-Toolkit:英雄联盟客户端终极自动化工具与数据分析平台完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Tool…...

如何通过Win11Debloat解决Windows系统卡顿与隐私泄露问题

如何通过Win11Debloat解决Windows系统卡顿与隐私泄露问题 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and customize …...

FanControl深度配置指南:解决Windows散热控制三大痛点

FanControl深度配置指南:解决Windows散热控制三大痛点 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...