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

c++基础(对c的扩展)

文章目录

  • 命令空间
  • 引用
    • 基本
    • 本质
    • 引用作为参数
    • 引用的使用场景
  • 内联函数
    • 引出
    • 基本概念
  • 函数补充
    • 默认参数
    • 函数重载
      • c++中函数重载定义
      • 条件
      • 函数重载的原理

命令空间

定义
namespace是单独的作用域 两者不会相互干涉

namespace 名字
{
//变量 函数 等等
}eg
namespace nameA {int num;void func() {cout << "nameA";}
}namespace nameB {int num;void func() {cout << "nameB";}
}

使用
::作用域操作符, 空间名::成员

cout << nameA::num<< "==" << nameB::num << endl;

注意

  • 命名空间只能再全局范围内定义
  • 可以嵌套定义
namespace nameA {namespace A {int num;}int num;void func() {cout << "nameA";}
}
  • 命名空间声明和实现可以分割开来
  • 命名空间可以起别名
namespace studentInfoHandle {int id, age;string name;void studying() {cout << "i am studying" << endl;}
}
// 别名
namespace sIH = studentInfoHandle;

引用

基本

引用可以看作一个已定义变量的别名

语法:Type&name=var;

注意:

  • &在这里不是求地址运算,而是起标识作用
  • 类型标识符是指目标变量的类型
  • 必须在声明引用变量时进行初始化
  • 引用初始化后不能改变(值可以变 引用不可变=》不可以引用其他的变量)
  • 不能有NULL引用。必须确保引用是一块合法的存储单元的关联
//一改均改int a = 50;int& b = a;b = 100;//均是100cout << a << endl;cout << b << endl;int& c = a;c = 500;//均是 500cout << a << endl;cout << b << endl;cout << c << endl;//地址 相同cout << &a << endl;cout << &b << endl;cout << &c << endl;

在这里插入图片描述

本质

引用的本质是一个常指针
int * const p

引用所占空间大小和指针相同

int &p=a; ==  int* const p=&a;

引用作为参数

typedef struct Teacher {int id, age;
};
void changeT(Teacher& t) {t.age = 100;
}/*
编译后  两者的功能是一样的
void changeT(Teacher* const t) {t.age = 100;
}
*/Teacher t;t.age = 50;changeT(t); //会改变结构体t的age的值cout << t.age << endl; //100
  • 引用作为其他变量的别名存在 一些场合下可以替代指针
  • 引用相比于指针有更好的可读性和实用性

引用的使用场景

对象中使用多 后续来看

内联函数

引出

宏实现简单函数
宏操作在预处理阶段就是简单的文本替换 没有类型检查

#define ADD(x,y) x+y// 要300 则x+y加上括号
int res = ADD(20,10)*10; //希望是300 但是实际上是 20+10*10=120

因此引出了内联函数
内联函数是一个真正的函数,但是没有函数的调用开销,又像普通函数一样可以传参返回值
相比于宏:既保持了宏函数的效率,又增加了安全性。

基本概念

定义
inline void func(){}
c++规定 内联函数的声明和定义必须放在一起

注意

  • 推荐使用内联函数替代宏代码片段
  • 内联函数在最终生成的代码中是没有定义的,所有内联函数的作用域可以理解位只在定义的文件中。那个文件调用那个文件就要定义,不能跨文件访问
  • inline只是对编译器的一个内敛请求,c++内敛编译会有一些限制,以下情况编译器可能考虑将函数进行内敛编译:
    • 存在任何形式的循环语句
    • 存在过多的条件判断语句
    • 函数体过于庞大
    • 对函数进行取址操作

函数补充

默认参数

// 带有默认参数被声明了 实现得使用就不需要传入默认参数了
//声明
int func(int r,double PI=3.14);
//实现
int func(int r,double PI){}int func(int r=1,int f); // 错误得

注意事项

  • 默认参数后面得参数必须都是默认参数
  • 带有默认参数函数被声明了,那么实现得使用就不需要传入默认参数了

函数重载

c中

void func(){}
void func(int x){}//报错 不允许 认为是一个函数

c++中函数重载定义

同一个函数名定义不同的函数
函数名和不同的参数搭配时函数的含义不同

条件

  • 作用域相同
  • 参数的个数不同
  • 参数的类型不同
  • 参数的顺序不同
namespace function0 {void fun() {cout << "func" << endl;}void fun(int x) { cout << "func(int x)" << endl;}void fun(int x,int y) { cout << "func(int x,int y)" << endl;}void fun(int x,char y) { cout << "func(int x,char y)" << endl;}void fun(char x, int y) { cout << "func(char x,int y)" << endl;}}function0::fun();function0::fun(1);function0::fun(1,2);function0::fun(1, 'a');function0::fun('a', 1);

在这里插入图片描述

函数重载的原理

  1. 编译器在将程序编译完成后会将变量和函数变成一个个的符号,存放这些符号的表格称为符号表
  2. 对程序进行编译查看对应函数的符号
# 编译命令
g++ -c main.cpp# 执行命令  查看符号表 
nm main.o


g++编译器在将函数转化为符号时,根据函数名、形参类型进行转化

如果使用g++编译c语言含义函数重载的代码,是编译成功的。

相关文章:

c++基础(对c的扩展)

文章目录 命令空间引用基本本质引用作为参数引用的使用场景 内联函数引出基本概念 函数补充默认参数函数重载c中函数重载定义条件函数重载的原理 命令空间 定义 namespace是单独的作用域 两者不会相互干涉 namespace 名字 { //变量 函数 等等 }eg namespace nameA {int num;v…...

RS485数据采集模块,如何一次采集多个modbus设备数据?

在工业数据采集中&#xff0c;RS485是一种常见的数据通信协议&#xff0c;而Modbus则是其上的常用设备协议。那么&#xff0c;如何用一个模块高效采集多个Modbus设备的数据呢&#xff1f;这就是我们今天要探讨的话题&#xff01; 什么是RS485数据采集模块&#xff1f; 首先&a…...

面试 Vue 框架八股文十问十答第一期

面试 Vue 框架八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;MVVM 的理解 MVVM (Mod…...

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队

一、前言 性能测试之于软件系统&#xff0c;是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线&#xff0c;系统能力设计工作与性能测试工作&#xff0c;既有先后之顺序&#xff0c;亦有相互之影响。以上&#xff0c;在性能测试的场景决策&#xff0c;架构…...

建立分位制,用标准去量化优化效果 - 启动优化为例

Android开发的四年多时间中&#xff0c;逐渐将自己的工作重心从业务移动到小型项目的架构设计&#xff0c;在此过程中代码的书写有了更高的标准和要求&#xff0c;性能优化从此伴随着工作脚步&#xff0c; 为什么要进行性能优化呢&#xff1f; 页面访问时长从1s增加到3s&#…...

Modbus 通信协议 二

Modbus 常用缩写 通用Modbus帧结构 -应用数据单元&#xff08;ADU&#xff09; Modbus数据模型 Modbus ADU 和 PDU 的长度 Modbus PDU结构 串行链路上的 Modbus 帧结构 Modbus 地址规则 ASCLL 模式 和 RTU 模式的比较 RTU 模式 RTU 模式位序列 帧格式 帧的标识与鉴别 CRC 循环冗…...

关于系统设计的一些思考

0.前言 当我们站在系统设计的起点&#xff0c;面对一个新的需求&#xff0c;我们该如何开始呢&#xff1f;这是许多处于系统分析与设计领域的新手常常思考的问题。有些人可能会误以为&#xff0c;只要掌握了诸如面向对象、统一建模语言、设计模式、微服务、Serverless、Servic…...

Java 第19章 IO流 课堂练习+本章作业

文章目录 Buffered流拷贝二进制文件创建文件写入文本读取文本文件存读Properties文件 Buffered流拷贝二进制文件 package com.hspedu.chapter19.outputStream;import java.io.*;public class BufferedCopy02 {public static void main(String[] args) {String srcFilePath &q…...

一键制作电子样册,提升企业品牌形象

​电子样册作为一种新型的宣传方式&#xff0c;具有许多优势。首先&#xff0c;它打破了传统纸质宣传册的局限性&#xff0c;可以随时随地展示企业的产品和服务。其次&#xff0c;电子样册可以通过多媒体形式展示企业的品牌形象&#xff0c;包括图片、视频、文字等多种形式&…...

Linux 的引导与服务控制

一 开机启动过程 bios加电自检-->mbr-->grub-->加载内核文件-->启动进程 1 bios家电自检 检测硬件是否正常&#xff0c;然后根据bios中的启动项设置&#xff0c;去找内核文件 2 mbr 因为grup太大,第一个扇区存不下所有的grub程序&#xff0c;所以分为2部分指…...

多输入多输出 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入多输出预测

多输入多输出 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入多输出预测 目录 多输入多输出 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多输入…...

高端电流检测方案

随着过去传统的“开环”系统被智能和高效率“闭环”设计所取代&#xff0c;准确的电流检测在多种应用中变得越来越重要。常见的电流检测方法&#xff0c;需要将检流电阻串联进被测电流通路&#xff0c;再用放大电路放大检流电阻上的压降。这个放大电路常被称之为电流检测放大器…...

IP地址、子网掩码与网络地址

一、IP地址 在 TCP/IP 体系中&#xff0c;IP 地址是一个最基本的概念。IP地址的作用&#xff1a;实现和网上的其他设备进行通信 IP地址的表示方法 互联网上的每台主机&#xff08;或路由器&#xff09;的每个接口都分配一个全世界唯一的IP地址。该IP地址由ICANN分配。 IP地址…...

python 深度学习 记录遇到的报错问题10

本篇继python 深度学习 解决遇到的报错问题9_module d2l.torch has no attribute train_ch3-CSDN博客 一、CUDA error: no kernel image is available for execution on the device CUDA kernel errors might be asynchronously reported at some other API call,so the stackt…...

linux下docker搭建Prometheus +SNMP Exporter +Grafana进行核心路由器交换机监控

一、安装 Docker 和 Docker Compose https://docs.docker.com/get-docker/ # 安装 Docker sudo apt-get update sudo apt-get install -y docker.io# 安装 Docker Compose sudo apt-get install -y docker-compose二、创建配置文件及测试平台是否正常 1、选个文件夹作为自建…...

Github 2023-12-31 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-31统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量TypeScript项目3Swift项目1Java项目1HTML项目1Astro项目1Python项目1C项目1Dart项目1Jupyter Notebook项目1C项…...

管程-第三十三天

目录 为什么要引入管程 管程的定义和基本特征 用管程解决生产者消费者问题 结论 本节思维导图 为什么要引入管程 原因&#xff1a;在解决进程的同步与互斥问题时&#xff0c;信号量机制存在编写困难和易出错的问题 能不能设计一种机制&#xff0c;让程序员写程序时不再需…...

嵌入式中断理解

一、概念 中断&#xff1a; 在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行。 中断优先级&#x…...

React16源码: Hooks源码实现

Hooks 1 &#xff09;概述 Hooks 在 React16.7版本出现的新功能Hooks 改变了整体应用开发的模式&#xff0c;同时开发体验会和以前会变得不一样Hooks 让函数组件具有类组件的能力 在 function component 里面没有this无法保存 state通过 Hooks可以让 function component 代替…...

华为端口隔离高级用法经典案例

最终效果&#xff1a; pc4不能ping通pc5&#xff0c;pc5能ping通pc4 pc1不能和pc2、pc3通&#xff0c;但pc2和pc3能互通 vlan batch 2 interface Vlanif1 ip address 10.0.0.254 255.255.255.0 interface Vlanif2 ip address 192.168.2.1 255.255.255.0 interface MEth0/0/1 i…...

高基数路由器的最佳拍档?深入浅出解析Flattened Butterfly拓扑的优缺点与适用场景

高基数路由器的最佳拍档&#xff1f;深入浅出解析Flattened Butterfly拓扑的优缺点与适用场景 在构建大规模互连网络时&#xff0c;拓扑结构的选择往往决定了系统的性能上限和成本下限。当工程师面对高基数路由器&#xff08;High-Radix Router&#xff09;的选型时&#xff0c…...

[路径保护]解决中文路径乱码:从名称错乱到Unicode支持的实践指南

[路径保护]解决中文路径乱码&#xff1a;从名称错乱到Unicode支持的实践指南 【免费下载链接】calibre-do-not-translate-my-path Switch my calibre library from ascii path to plain Unicode path. 将我的书库从拼音目录切换至非纯英文&#xff08;中文&#xff09;命名 项…...

Spring Boot项目SQL执行监控实战:手把手集成P6spy,自定义日志格式并输出到文件

Spring Boot生产环境SQL监控全方案&#xff1a;P6spy高阶配置与日志持久化实战 当你负责的电商系统在促销活动期间突然出现响应迟缓&#xff0c;或是金融交易系统在月末结算时频繁超时&#xff0c;数据库查询性能往往是首要怀疑对象。但生产环境的数据库通常不允许直接连接进行…...

Llama-3.2V-11B-cot部署教程:WSL2环境下双4090识别与分配验证

Llama-3.2V-11B-cot部署教程&#xff1a;WSL2环境下双4090识别与分配验证 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具。该工具针对双卡4090环境进行了深度优化&#xff0c;特别适合在WSL2环境下部署使用。通过本教程…...

效率倍增:用快马生成jdk一键配置脚本与docker环境模板

效率倍增&#xff1a;用快马生成JDK一键配置脚本与Docker环境模板 每次新换电脑或者重装系统&#xff0c;最头疼的就是重新配置开发环境。特别是Java开发&#xff0c;光是下载JDK、配置环境变量就得折腾半天。最近发现用InsCode(快马)平台可以快速生成自动化脚本&#xff0c;把…...

如何通过LibreHardwareMonitor实现高效全面的硬件监控:实用指南

如何通过LibreHardwareMonitor实现高效全面的硬件监控&#xff1a;实用指南 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor, home of the fork of Open Hardware Monitor 项目地址: https://gitcode.com/GitHub_Trending/li/LibreHardwareMonitor Libre…...

快速体验Qwen3-0.6B-FP8:无需下载模型,开箱即用的AI文本生成服务

快速体验Qwen3-0.6B-FP8&#xff1a;无需下载模型&#xff0c;开箱即用的AI文本生成服务 1. 为什么选择Qwen3-0.6B-FP8&#xff1f; Qwen3-0.6B-FP8是Qwen系列最新推出的轻量级语言模型&#xff0c;采用FP8量化技术大幅降低了显存需求。相比传统模型&#xff0c;它具有以下突…...

Redis监听Key过期事件报错?教你两种绕过CONFIG命令的实用方案

Redis监听Key过期事件的两种安全实践方案 Redis的Key过期事件监听是许多业务场景中的核心需求&#xff0c;比如订单超时处理、会话管理、缓存刷新等。但在云服务环境中&#xff0c;开发者常会遇到ERR unknown command CONFIG的报错&#xff0c;这通常是因为云服务提供商出于安全…...

软件工程实战:如何用数据流图搞定图书馆管理系统设计(附避坑指南)

软件工程实战&#xff1a;如何用数据流图搞定图书馆管理系统设计&#xff08;附避坑指南&#xff09; 图书馆管理系统是软件工程课程中的经典案例&#xff0c;但许多初学者在绘制数据流图时容易陷入"画了等于没画"的困境——要么遗漏关键外部实体&#xff0c;要么数据…...

避免Java Stream重复消费:高效过滤Map的策略

本文旨在解决Java Stream在多过滤场景中常见的IllegalStatexception&#xff0c;即流被重复消耗的问题。我们将深入讨论Java Stream的单次使用特性&#xff0c;通过将外部过滤条件转换为集合&#xff0c;优化Map的过滤操作&#xff0c;提供高效、符合最佳实践的解决方案&#x…...