C++知识点:C和C++(自用)

C和C++

  • 1.类和结构体的关系:
  • 2.面向对象和面向过程
  • 3.头文件和标准命名空间
  • 4.cin和cout
  • 5. const在C++中和C中的区别
  • 6.const全局作用域
  • 7 new和delete
  • 8 内联函数
  • 9 函数重载
  • 10. 函数重载的匹配


引用:
[1]C语言中文网


1.类和结构体的关系:

类是结构体的升级表现,结构体只能封装变量,类不仅可以封装变量,还可以封装函数。使得具有耦合关系的变量和函数统一管理。

2.面向对象和面向过程

面向对象是在面向过程的基础上,进一步的封装。
(图片引用自C语言中文网)
在这里插入图片描述

不要把面向对象和面向过程对立起来。面向对象在执行效率上没有明显优势,但是有利于多人配合的大型代码管理。

3.头文件和标准命名空间

带c的头文件,例如cstdio、cstdlib。都是原C语言头文件。引用方式:#include < cstdio>

后缀带.h的头文件,例如stdio.h、stdlib.h,iostream.h、fstream.h 都是老式C++语言的头文件,没有使用任何命名空间,所有符号都位于全局作用域。引用方式:#include <stdio.h>

后缀不带.h的头文件,例如stdio、stdlib、iostream、fstream,都是新式统一修改过的C++语言的头文件,头文件的内容在命名空间 std 中。引用方式:#include < iostream>

4.cin和cout

cout 和 cin 分别是ostream和istream的C++内置对象,而不是关键字,在标准库中提前实例化。这种提前创建的对象被称为内置对象。

5. const在C++中和C中的区别

在这里插入图片描述
在这里插入图片描述
从上述两幅图中可以看出,在C++语言中const修饰的常量类似于#define的操作,直接替换,无需读取内存数据。它和#define的区别在于,#define是在预处理阶段就替换,const是在编译阶段就替换。

而C语言中const修饰的常量是由对应数据存储的,每次使用常量,会先读取对应内存地址中的数据,然后使用。

补充其他两个知识点:

  1. &n得到的是const int类型指针,需要进行(int*)强制类型转化。
  2. const修饰的常量在C语言中其实是可以通过指针修改的。

在C++语言中,#define和const的区别。#define仅是字符串的替换,不会做类型检查。而const是有类型的,可以做类型检查。

6.const全局作用域

普通全局变量的作用域是当前文件,但是在其他文件中也是可见的,使用extern声明后就可以使用
(图片引用自C语言中文网)
在这里插入图片描述
但是注意:C++对于const的特性做了修改,对于const修饰的常量,对于当前文件时可见的,但是对于其他文件不可见,这和添加了static关键字的效果类似。

由于该特性,建议讲const修饰的常量放在头文件中,这样就可以多文件多次使用。

C和C++中全局 const 变量的作用域相同,都是当前文件,不同的是它们的可见范围:C语言中 const 全局变量的可见范围是整个程序,在其他文件中使用 extern 声明后就可以使用;而C++中 const 全局变量的可见范围仅限于当前文件,在其他文件中不可见,所以它可以定义在头文件中,多次引入后也不会出错。

7 new和delete

在C语言中,会用malloc()来申请动态内存,用free()来释放内存

int *p = (int*)malloc(sizeof(int) * 10);
free(p);

在C++语言中,会用new[]来申请动态内存,用delete[]来释放内存。

int *p = new int;
delete p;int *p = new int[10];
delete[] p;

不论是C++中的new还是C中的malloc(),申请的内存都是存放在堆区,并且必须配合delete或者free()进行释放,否则会造成内存泄漏。

8 内联函数

作用:内联函数主要有两个作用,一是消除函数调用时的开销,二是取代带参数的宏

程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。(引用自C语言中文网)

要在函数定义处添加 inline 关键字,在函数声明处添加 inline 关键字是无效的。

当函数非常复杂的时候,时空开销忽略不计,因此只是将短小的函数声明为内联函数

宏定义如果带参数的话经常会出现很多程序bug(因为只是简单的字符串替换,没有类型检查和数据检查),用内联函数就很好的规避这些问题。

9 函数重载

作用:重载是在一个作用范围内,例如一个类或者命名空间中,存在多个命名相同但参数列表不同的函数,从而可以让相同名称的函数实现不同的功能(但是功能务必相似)。

规则:

  1. 函数名称必须相同。
  2. 函数的参数列表必须不同。(类型不同,个数不同,顺序不同等,但是仅仅参数名称不同是不可以的)
  3. 返回值可以是相同也可以是不同。
  4. 仅仅函数返回值不同不能作为重载依据。

函数重载仅仅是语法层面的,本质上它们还是不同的函数,占用不同的内存,入口地址也不一样。

10. 函数重载的匹配

函数重载本质上还是不同的函数,每次调用函数时,编译器就会通过参数列表匹配到对应的函数,其优先级详见下述图片,具体优先级分别为:精准匹配>类型提升>类型转化。如果匹配成功则终止,不再往下匹配。
(图片引用自C语言中文网)
在这里插入图片描述

在参数过少,或者过多的时候就会出现函数参数的二义性。比如:参数中都属于类型转化优先级,则会出现编译器不知道如何处理的情况。

类型转化和类型提升不一样。类型提升是积极的,是为了适应计算机硬件的,可以提升效率。类型转化是不得已的,是消极的。

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

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

相关文章

Linux bash: yum-config-manager: command not found的解决方法

yum-config-manager简介 Linux yum-config-manager 是一个用于管理 YUM 仓库配置的工具&#xff0c;它允许用户启用、禁用、添加或删除 YUM 仓库。这个命令在基于 Red Hat 的系统中广泛使用&#xff0c;比如 CentOS 和 Fedora。 可能原因 用户可能未安装 yum-utils 包&#…

Qt文件下载工具

在Qt中实现文件下载功能&#xff0c;通常可以通过多种方式来完成&#xff0c;包括使用 QNetworkAccessManager 和 QNetworkReply 类&#xff0c;或者使用更高级别的 QHttpMultiPart 类。以下是两种常见的实现方法&#xff1a; 方法1&#xff1a;使用 QNetworkAccessManager 和…

pxe高效网络批量装机

文章目录 一&#xff0c; PXE远程安装服务&#xff08;一&#xff09;三种系统装机的方式&#xff08;二&#xff09;linux装机1. 加载 Boot Loader2. 加载启动安装菜单3. 加载内核和 initrd4. 加载根文件系统5. 运行 Anaconda 安装向导 &#xff08;三&#xff09;实现过程&am…

【ROS2】测试

为什么要进行自动化测试&#xff1f; 以下是我们应该进行自动化测试的许多重要原因之一&#xff1a; 您可以更快地对代码进行增量更新。ROS 有数百个包&#xff0c;具有许多相互依赖关系&#xff0c;因此很难预见一个小变化可能引起的问题。如果您的更改通过了单元测试&#xf…

语言主要是一种交流工具,而不是思维工具?GPT5何去何从?

引言 在人工智能领域&#xff0c;特别是大语言模型&#xff08;LLM&#xff09;的发展中&#xff0c;语言和思维的关系一直是一个备受关注的话题。近期&#xff0c;麻省理工学院&#xff08;MIT&#xff09;在《Nature》杂志上发表了一篇题为《Language is primarily a tool f…

Unity踩坑之RectTransformUtility.ScreenPointToLocalPointInRectangle

此方法会将屏幕坐标点转换为UI的本地坐标点&#xff0c;即UI子物体相对于父物体的相对位置。不过值得注意的是&#xff1a;当父物体的锚点不在中心时&#xff0c;可能比较麻烦&#xff0c;因为UI的本地坐标是相对于父物体的锚点来计算的。 RectTransformUtility.ScreenPointToL…

linux进程——概念理解与PCB

前言&#xff1a;本篇讲解Linux进程概念相关内容。 操作系统被称为计算机世界的哲学&#xff0c; 可以见得操作系统的知识并不好理解。 对于这篇进程概念的讲解&#xff0c; 博主认为&#xff0c; 如果没有一些前置知识的话&#xff0c;里面的有些概念并不好理解。 但是如果学习…

SQL Server 用户应当如何防范 Mallox (.hmallox) 勒索软件袭击

勒索软件领域的特点是随着时间的流逝&#xff0c;参与者群体和恶意软件家族都会大量流失&#xff0c;只有少数参与者表现出相对长寿的寿命。曾经令人担忧的威胁&#xff0c;如 REvil 和 Conti&#xff0c;要么被铲除&#xff0c;要么被解散&#xff0c;而其他威胁——例如 ALPH…

UGUI优化篇(更新中)

UGUI优化篇 1. 基础概念2. 重要的类1. MaskableGraphic类继承了IMaskable类2. 两种遮罩的实现区别RectMask2DMask 3. 渲染部分知识深度测试深度测试的工作原理 渲染队列透明物体在渲染时怎么处理为什么透明效果会造成性能问题 1. 基础概念 所有UI都由网格绘制的如image由两个三…

Leetcode(经典题)day4

滑动窗口 长度最小的子数组 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 使用滑动窗口&#xff0c;当前窗口大小的数组的和比目标值小就加大窗口&#xff08;r&#xff09;&#xff0c;当前窗口大小的数组的和比目标值大或相等&#xff0c;就减小窗口大小…

力扣题解(不同的子序列)

115. 不同的子序列 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 思路&#xff1a; 本题研究的是t在s中出现的次数&#xff0c;注意t一定是小的那个&#xff0c;是s的子串。 dp[i][j]表示t的&#xff…

25届平安产险校招测评IQ新16PF攻略:全面解析与应试策略

尊敬的读者&#xff0c;您好。随着平安产险校招季的到来&#xff0c;许多应届毕业生正积极准备着各项测评。本文旨在提供一份详尽的测评攻略&#xff0c;帮助您更好地理解平安产险的校招测评流程&#xff0c;以及如何有效应对。 25届平安产险平安IQ&#xff08;新&#xff09;测…

AI大模型探索之旅:深潜大语言模型的训练秘境

在人工智能的浩瀚星空中&#xff0c;大语言模型无疑是最耀眼的星辰之一&#xff0c;它们以无与伦比的语言理解与生成能力&#xff0c;引领着智能交互的新纪元。本文将带您踏上一场探索之旅&#xff0c;深入大语言模型的训练秘境&#xff0c;揭开其背后复杂而精妙的全景画卷。 …

Java常用API---Object类

Object类概述 概述 Object类是所有类的父类&#xff0c;任何一个类的对象(包括数组)&#xff0c;都可以调用Object类的方法 目标: 掌握Object类的常用方法 常用方法&#xff1a; boolean equals(Object obj)&#xff1a;判断当前对象是否与参数对象"相等" Strin…

Linux时间查看和设置

查看时间 date 命令&#xff0c;输出 Sun Jul 14 07:23:03 PM CST 2024timedatectl 命令&#xff0c;输出 Local time: Sun 2024-07-14 10:30:00 CSTUniversal time: Sun 2024-07-14 02:30:00 UTCRTC time: Sun 2024-07-14 02:30:00Time zone: Asia/Shanghai (CST, 0800) Sys…

汇编学习基础知识【记录】

前言 又是快乐的学习汇编的一天&#xff0c;时间如白驹过隙&#xff0c;抓紧时间&#xff0c;在学习能力最好的年纪多学习一些知识&#xff0c;朝着美好生活而奋斗&#xff01;哈哈哈 参考文章&#xff1a; https://blog.csdn.net/Z_H_Z_0/article/details/106574292 知识补…

给 「大模型初学者」 的 LLaMA 3 核心技术剖析

编者按&#xff1a; 本文旨在带领读者深入了解 LLaMA 3 的核心技术 —— 使用 RMSNorm 进行预归一化、SwiGLU 激活函数、旋转编码&#xff08;RoPE&#xff09;和字节对编码&#xff08;BPE&#xff09;算法。RMSNorm 技术让模型能够识别文本中的重点&#xff0c;SwiGLU 激活函…

现在有哪些微服务解决方案?

Dubbo&#xff1a;是一个轻量级的Java微服务框架&#xff0c;最初由阿里巴巴在2011年开源。它提供了服务注册与发现、负载均衡、容错、分布式调用等。Dubbo更多的被认为是一种高性能的RPC框架&#xff08;远程过程调用&#xff09;&#xff0c;一些服务治理功能依赖第三方组件完…

以一个springboot项目中创建用户会话的业务背景来说明threadlocal的用法

在Spring Boot项目中&#xff0c;ThreadLocal 是一个非常有用的工具&#xff0c;特别是在处理用户会话信息时。ThreadLocal 允许你在同一个线程中存储和访问变量&#xff0c;而不会与其他线程的变量发生冲突。这对于存储用户会话信息、请求上下文等非常有用。 以下是一个示例&…

第一部分:C++入门

目录 前言 1、C关键字(C98) 2、命名空间 2.1、命名空间定义 2.2、命名空间的使用 3、C输入&输出 4、缺省参数 4.1、缺省参数的概念 4.2、缺省参数的分类 5、函数重载 5.1、函数重载的概念 5.2、C支持函数重载的原理 6、引用 6.1、引用的概念 6.2、引用特性 …