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语言中文网)
在这里插入图片描述

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3实现无缝滚动列表(大屏数据轮播场景)

实现思路 vue3目前可以通过第三方组件来实现这个需求。 下面介绍一下这个第三方滚动组件--vue3-scroll-seamless vue3-scroll-seamless 是一个用于 Vue 3 的插件&#xff0c;用于实现无缝滚动的组件。它可以让内容在水平或垂直方向上无缝滚动&#xff0c;适用于展示轮播图、新…

值得关注的数据资产入表

不错的讲解视频&#xff0c;来自&#xff1a;第122期-杜海博士-《数据资源入表及数据资产化》-大数据百家讲坛-厦门大学数据库实验室主办第122期-杜海博士-《数据资源入表及数据资产化》-大数据百家讲坛-厦门大学数据库实验室主办-20240708_哔哩哔哩_bilibili

深度学习和NLP中的注意力和记忆

深度学习和NLP中的注意力和记忆 文章目录 一、说明二、注意力解决了什么问题&#xff1f;#三、关注的代价#四、机器翻译之外的关注#五、注意力&#xff08;模糊&#xff09;记忆&#xff1f;# 一、说明 深度学习的最新趋势是注意力机制。在一次采访中&#xff0c;现任 OpenAI 研…

接口基础知识2:http通信的组成

课程大纲 一、http协议 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网中被使用最广的一种网络协议&#xff0c;用于客户端与服务器之间的通信。 HTTP协议定义了一系列的请求方法&#xff0c;例如 GET、POST、PUT、DELETE 等&…

[线性RNN系列] Mamba: S4史诗级升级

前言 iclr24终于可以在openreview上看预印本了 这篇&#xff08;可能是颠覆之作&#xff09;文风一眼c re组出品&#xff1b;效果实在太惊艳了&#xff0c;实验相当完善&#xff0c;忍不住写一篇解读分享分享。 TL;DR &#xff08;overview&#xff09; Structured State-Sp…

代码随想录算法训练营Day21 | 669. 修剪二叉搜索树 | 108.将有序数组转换为二叉搜索树 | 538.把二叉搜索树转换为累加树

今日任务 669. 修剪二叉搜索树 题目链接&#xff1a; https://leetcode.cn/problems/trim-a-binary-search-tree/description/题目描述&#xff1a; Code class Solution { public:TreeNode* trimBST(TreeNode* root, int low, int high) {if(root nullptr){return root;…

virtualbox的ubuntu默认ipv4地址为10.0.2.15的修改以及xshell和xftp的连接

virtualbox安装Ubuntu后&#xff0c;默认的地址为10.0.2.15 我们查看virtualbox的设置发现是NAT 学过计算机网络的应该了解NAT技术&#xff0c;为了安全以及缓解ip使用&#xff0c;我们留了部分私有ip地址。 私有IP地址网段如下&#xff1a; A类&#xff1a;1个A类网段&…

GuLi商城-商品服务-API-品牌管理-JSR303自定义校验注解

自定义注解规则: 可以参考@NotNull注解 package com.nanjing.common.valid;import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target;i…

MATLAB激光通信和-积消息传递算法(Python图形模型算法)模拟调制

&#x1f3af;要点 &#x1f3af;概率论和图论数学形式和图结构 | &#x1f3af;数学形式、图结构和代码验证贝叶斯分类器算法&#xff1a;&#x1f58a;多类型&#xff1a;朴素贝叶斯&#xff0c;求和朴素贝叶斯、高斯朴素贝叶斯、树增强贝叶斯、贝叶斯网络增强贝叶斯和半朴素…

Java性能优化-switch性能优化-用String还是int做比较

场景 Java中使用JMH(Java Microbenchmark Harness 微基准测试框架)进行性能测试和优化&#xff1a; Java中使用JMH(Java Microbenchmark Harness 微基准测试框架)进行性能测试和优化_java热点函数-CSDN博客 参考以上性能测试工具的使用。 下面针对Java中对switch-case比较时…

Prometheus 云原生 - 基于 file_sd、http_sd 实现 Service Discovery

目录 开始 为什么需要服务发现机制 File Service Discovery&#xff08;file_sd&#xff09; 基本概念 配置方式 使用案例 HTTP Service Discovery&#xff08;http_sd&#xff09; 基本概念 配置方式 使用案例 开始 为什么需要服务发现机制 我们知道在 Prometheus …

Java核心篇之JVM探秘:垃圾回收算法与垃圾收集器

系列文章目录 第一章 Java核心篇之JVM探秘&#xff1a;内存模型与管理初探 第二章 Java核心篇之JVM探秘&#xff1a;对象创建与内存分配机制 第三章 Java核心篇之JVM探秘&#xff1a;垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战&#xff1a;Arthas工具使用及…

VUE_TypeError: Cannot convert a BigInt value to a number at Math.pow 解决方法

错误信息 TypeError: Cannot convert a BigInt value to a number at Math.pow vue 或 react package.json添加 "browserslist": {"production": ["chrome > 67","edge > 79","firefox > 68","opera >…

Go语言---TCP服务端以及客服端的实现

TCP的C/S架构 TCP服务器的实现 监听的底层实现 func Listen(network, address string) (Listener, error) {var lc ListenConfigreturn lc.Listen(context.Background(), network, address) }type Listener interface {// Accept waits for and returns the next connection …

每日Attention学习10——Scale-Aware Modulation

模块出处 [ICCV 23] [link] [code] Scale-Aware Modulation Meet Transformer 模块名称 Scale-Aware Modulation (SAM) 模块作用 改进的自注意力 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional as Fclass SAM(nn.Module):def __init__…

C++笔试强训5

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 x1&#xff0c;先x&#xff0c;再x–&#xff0c;while判断永远为真&#xff0c;故死循环 选D。 sizeof会计算\0,strlen不包括\0,并且strlen只计算\0之前的。 所以sizeof是10&#xff0c;strken是4 …

纯净IP的重要性解析与测评分析

作为连接互联网世界的桥梁&#xff0c;IP地址的纯净度不仅关乎网络访问的速度与稳定性&#xff0c;更是影响着数据安全与隐私保护。今天&#xff0c;我们将带您深入探索纯净IP的重要性&#xff0c;并分享我们对芝麻HTTP与巨量IP这两家提供纯净SOCKS5代理服务的深度测评分析。 一…

SSM整合--笔记总结

1.概述 ssm(springmvc spring mybatis)这三个框架的整合。 spring和springmvc他们隶属于一家公司&#xff0c;他们无需整合。 spring和mybatis框架的整合。 spring把mybatis中的配置内容放到自己的配置文件中。因为我们可以让tomcat加载spring配置文件。 思考:mybatis配置文件…

240710_昇思学习打卡-Day22-条件随机场

240710_昇思学习打卡-Day22-条件随机场 在正式开始LSTMCRF序列标注之前&#xff0c;我们先来了解一下条件随机场&#xff0c;以下仅做简单介绍。 CRF全称Conditional Random Field&#xff0c;按照名字来理解&#xff0c;条件随机&#xff0c;随机输入&#xff0c;条件输出。…

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点

在数字技术的浪潮下&#xff0c;3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间&#xff0c;还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性&#xff0c;让艺术不再是单一的视觉享受。在这里&#x…