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

C++基础语法

1.命名空间

命名空间(Namespace) 是一种用于组织代码、避免命名冲突的机制。它通过将全局作用域的标识符(变量、函数、类等)分组到特定的命名空间中,有效解决了大型项目中可能出现的名称重复问题

命名空间的核心作用

  1. 避免命名冲突:当不同库或模块定义了相同名称的标识符时,命名空间可以隔离它们。

  2. 代码模块化:通过逻辑分组提高代码可读性和可维护性。

  3. 控制标识符可见性:通过命名空间限定符显式访问特定标识符。

1.1.基本语法

1.定义命名空间

namespase在全局范围中定义

2.访问命名空间成员

使用作用域解析运算符 ::

1.2.用法

1.嵌套使用

2.匿名使用

只能当前文件使用,其他文件访问不了

3.使用using声明

4.使用别名

2.C++中的输入输出

在 C++ 中,输入输出(Input/Output,简称 I/O)主要通过 标准库 <iostream> 和 文件流 <fstream> 实现

1.输出:

2.输入

3.缺省参数

在调⽤该函数时,如果没有指定实参
则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数

核心规则

函数定义规则:

1. 从右向左连续设置

缺省参数必须从右向左连续定义,即:

1.如果某个参数有默认值,其右侧所有参数必须都有默认值。

2.左侧参数可以有或没有默认值。

调用方规则:

1.缺的一定要传

2.不能跳传,不传的后面的都别传了

4.方法的重载

重载规则:

1.参数列表不同

这是方法重载的关键,参数的类型、数量或者顺序不同都可以实现重载

2.返回类型不能作为重载的依据

3.const修饰形参可以作为依据

5.引用

引用相当于取别名,对于一个变量来说,变量本身可以访问存储变量的内存空间,此时引用就是赋予这个别名也可以一起访问这个内存空间

下面对应的地址都是一样的

引用的要求

1.必须初始化

引用必须在声明时绑定到一个已存在的变量,不能为 NULL

2.不可以重新绑定

除非绑定的是同一块内存

3.必须指向有用的内存

引用必须指向有效的内存地址,不存在类似指针的 NULL 引用。

4.常量引用

常量引用可以绑定到常量或临时值,但不能通过引用修改原值。

5.1.const

1.权限放大

此时a是不可以被修改的,但是别名 v可以被修改,这是权限放大,所以此时是不可以的

2.权限缩小

此时a是可以被修改的,但是别名 v不可以被修改,,这是权限缩小,所以此时是可以的

3.临时变量

临时变量:所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象,
C++中把这个未命名对象叫做临时对象。
常性:⽽C++规定临时对象具有常性,所以这⾥
就触发了权限放⼤,必须要⽤常引⽤才可以。
产生条件:
1.表达式
2.类型转换
此时的临时变量具有常性,所以无法进行改变,所以取别名的时候,需要加上const

5.2.引用与指针关系

语法概念上引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。
引⽤在定义时必须初始化,指针建议初始化,但是语法上不是必须的。
引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。
引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。
sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下 占4个字节,64位下是8byte)
指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些。

6.inline

inline 是一个用于函数声明和定义的关键字,它的主要用途是建议编译器将函数调用替换为函数体的实际代码,以此减少函数调用带来的开销,就是为了提高运行效率

使用:

在声明或者在定义的时候,直接加在前面即可

工作原理:

inline 只是对编译器的一个建议,而非强制要求。编译器会根据函数的复杂度、调用情况等因素来决定是否真正将函数内联展开。例如,递归函数、包含循环或复杂控制结构的函数,编译器通常不会将其内联。

优点:

1.减少函数调用开销:函数调用会涉及到一系列的操作,如保存和恢复寄存器、参数传递、栈帧的创建和销毁等,使用内联函数可以避免这些开销,提高程序的执行速度。

2. 提高代码可读性:内联函数可以像宏一样在调用处展开,但又具有函数的类型检查和作用域规则,能让代码更易读和维护。

缺点:

1.代码膨胀:如果内联函数的代码较长或者被大量调用,会导致代码量显著增加,可能会使程序的内存占用变大。

2.编译时间增加:编译器需要在每个调用点插入函数体代码,这会增加编译的时间和复杂度。

7.nullptr

nullptr是 C++11 引入的关键字,用于表示空指针值,是对传统 C 语言中NULL宏的改进
nullptr:
空指针常量,表示一个不指向任何对象或函数的指针,可以隐式转换为任意指针类型,但不能转换为整数类型
避免二意性

8.作用域解析运算符::

8.1.访问全局作用域的标识符

当局部代码中的局部变量和全局变量重名的时候,就可以使用”::“进行区分

8.2.访问命名空间中的表示符

命名空间,就是为了避免命名上的冲突,所以将,函数,变量,类封装在一个命名空间中,

访问命名空间的时候,命名空间名::要访问的变量,即可

8.3.访问类的静态成员

在全局变量中对类中静态成员进行初始化,

在局部变量中调用静态成员变量,

类名::静态成员名

8.4.定义类的成员函数

当类中只对成员函数进行声明,准备在全局进行初始化,就可以使用

类名::函数名  来进行指定哪个类中的哪个函数

http://www.dtcms.com/a/310411.html

相关文章:

  • Redis实战(5)-- 高级数据结构 HyperLogLog
  • 调整Idea缓存目录,释放C盘空间
  • UniApp与WebView双向通信机制及生产级实现方案全解析
  • 振动波形转音频播放并做声纹聚类
  • 【数据分享】南海综合波浪数据(1945-2018 年)(获取方式看文末)
  • 【历史人物】【王安石】简历与生平
  • win11怎么看本机ip地址?怎么查看代理端口?
  • SAP Datasphere 03 - 数据权限
  • OpenShift AI - 用 Hardware profiles 为运行环境分配可用的硬件规格
  • 什么是股指期货的不对冲策略?
  • 【Flutter】内存泄漏总结
  • HarmonyOS 应用拉起系列(一):应用与元服务互通方式
  • 哔哩哔哩Android视频编辑页的架构升级
  • 二进制数本身没有默认的有符号或无符号解释
  • Eden 和 Survivor 比例可以调整么,参数是什么?还用到了哪些参数?
  • 数新智能 CTO 原攀峰:DataCyber 面向 AI 时代的多模态数据湖设计与实践
  • MYSQL:JDBC编程
  • C语言笔记4:错题整理
  • QT开发---图形与图像(补充)
  • ZYNQ与MPSoC实战:从Vitis入门到项目开发
  • Java学习-运算符
  • HRM论文解读
  • Windows安装虚拟机遇到内容解码失败
  • 【Django】-2- 处理HTTP请求
  • HTTP客户端实现:深入理解Go的net/http包
  • Vue3 + Vite 项目中 API 代理配置问题分析与解决
  • 如何处理Y2K38问题
  • 驾驶场景安全带识别误检率↓76%:陌讯动态特征聚合算法实战解析
  • 【深度学习①】 | Numpy数组篇
  • 【从0开始学习Java | 第12篇】内部类