【C++】详解声明和定义

2023年8月28日,周一下午

研究了一个下午才彻底弄明白...

写到晚上才写完这篇博客。


目录

  • 声明和定义的根本区别
  • 结构体的声明和定义
  • 声明结构体
  •  定义结构体
  • 类的声明和定义
  • 函数的定义和声明
  • 声明函数
  •  定义函数
  • 变量声明和定义
  • 声明变量
  • 定义变量

声明和定义的根本区别

我认为声明和定义的根本区别在于:

同类型的一个标识符可以被重复声明多次,但只能被定义一次。

简单来说,声明可以重复多次,但定义只能进行一次。

和分不分配内存没有关系。

结构体的声明和定义

声明结构体

struct student;

可以看到,我声明了两次结构体student,VS2022没有报错 

 定义结构体

结构体的定义只是对结构体类型的描述,并不会为其分配内存。

要使用结构体,需要定义结构体变量,并为其分配内存空间。

struct student {
	int age;
};

可以看到,定义了两次结构体student后,VS2022报错 

类的声明和定义

因为与结构体的声明和定义一模一样,故不再赘述。

函数的定义和声明

声明函数

int max(int num1, int num2);

 可以看到,我声明了两次函数max,VS2022没有报错 

 定义函数

当定义函数时,并没有为函数本身分配内存。

在编译和链接的过程中,函数的定义会被转换成机器代码,并存储在可执行文件中。当程序运行时,操作系统会为程序分配内存,并将函数的机器代码加载到内存中供程序执行。

int max(int num1, int num2) {
	return num1 > num2 ? num1 : num2;
}

可以看到,定义了两次函数max后,VS2022报错  

变量声明和定义

声明变量

在我看来,声明变量只有一种方法:那就是使用extern且不赋值。

因为,这是我所知唯一允许多次重复声明的情况。

此外,这种情况下不会分配内存。

extern type name;
extern int x;
extern student s1;

可以看到,我声明了两次int类型的变量x后,VS2022没有报错  

定义变量

在我看来,这三种情况都属于定义变量。

因为这三种情况不允许重复,只能进行一次。

此外,这三种情况都会被分配内存。这是和上面提到的完全不一样的,上面提到过的都不会在定义时分配内存。

extern type name=value;
type name;
type name=value;
extern int x=1;
int x;
int x=1;

可以看到,这三种情况都不允许多次定义。 

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

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

相关文章

全景图像生成算法

摘要 全景图像生成是计算机视觉领域的一个重要研究方向。本文对五种经典的全景图像生成算法进行综述,包括基于相机运动估计的算法、基于特征匹配的算法、基于图像切割的算法、基于多项式拟合的算法和基于深度学习的算法。通过对这些算法的原理、优缺点、适用场景等…

14-redis

一 Redis概述 1 为什么要用NoSQL 单机Mysql的美好年代 在90年代,一个网站的访问量一般都不大,用单个数据库完全可以 轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。 遇到问题: 随着用户数的增长…

【建议收藏】Kubernetes 网络策略入门:概念、示例和最佳实践,附云原生资料

目录 摘要 一、Kubernetes 网络策略组件 二、实施网络策略 示例 1:在命名空间中限制流量 示例 2:允许特定 Pod 的流量 示例 3:在单个策略中组合入站和出站规则 示例 4:阻止对特定 IP 范围的出站流量 三、Kubernetes 网络策…

R包开发-2.2:在RStudio中使用Rcpp制作R-Package(更新于2023.8.23)

目录 4-添加C函数 5-编辑元数据 6-启用Roxygen,执行文档化。 7-单元测试 8-在自己的计算机上安装R包: 9-程序发布 参考: 为什么要写这篇文章的更新日期?因为R语言发展很快,很多函数或者方式,现在可以使…

stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)

单片机型号STM32F103R6: 最后实现的效果是,开机后PC内要求输入1或0,输入1则打开灯泡,输入0则关闭灯泡,输入其他内容则显示错误,值得注意的是这个模拟的东西只能输入英文 之所以用2个LED灯是因为LED电阻粗略一算就是1…

Linux(实操篇一)

Linux实操篇 Linux(实操篇一)1. 常用基本命令1.1 帮助命令1.1.1 man获得帮助信息1.1.2 help获得shell内置命令的帮助信息1.1.3 常用快捷键 1.2 文件目录类1.2.1 pwd显示当前 工作目录的绝对路径1.2.2 ls列出目录的内容1.2.3 cd切换目录1.2.4 mkdir创建一个新的目录1.2.5 rmdir删…

Bigemap在路桥行业是怎么应用的?

选择Bigemap的原因: 奥维下架了,后来了解到的bigemap,于是测试了这款软件 使用场景: 下载影像、矢量路网做前期策划,下载完数据后导出cad ,做一些标注,最终出图下载等高线,作为前期选址依据 …

java八股文面试[多线程]——线程的生命周期

笔试题:画出线程的生命周期,各个状态的转换。 5.等待队列(本是Object里的方法,但影响了线程) 调用obj的wait(), notify()方法前,必须获得obj锁,也就是必须写在synchronized(obj) 代码段内。与等待队列相关的步骤和图 …

股票预测和使用LSTM(长期-短期-记忆)的预测

一、说明 准确预测股市走势长期以来一直是投资者和交易员难以实现的目标。虽然多年来出现了无数的策略和模型,但有一种方法最近因其能够捕获历史数据中的复杂模式和依赖关系而获得了显着的关注:长短期记忆(LSTM)。利用深度学习的力…

[MyBatis系列⑥]注解开发

🍃作者简介:准大三本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐MyBatis系列①:增删改查 ⭐MyBatis系列②:两种Dao开发方式 ⭐MyBatis系列③:动态SQL ⭐MyBatis系列④:核心…

Postman API测试之道:不止于点击,更在于策略

引言:API测试的重要性 在当今的软件开发中,API已经成为了一个不可或缺的部分。它们是软件组件之间交互的桥梁,确保数据的流动和功能的实现。因此,对API的测试显得尤为重要,它不仅关乎功能的正确性,还涉及到…

android framework之Applicataion启动流程分析

Application启动流程分析 启动方式一:通过Launcher启动app 启动方式二:在某一个app里启动第二个app的Activity. 以上两种方式均可触发app进程的启动。但无论哪种方式,最终通过通过调用AMS的startActivity()来启动application的。 根据上图…

论文解读 | ScanNet:室内场景的丰富注释3D重建

原创 | 文 BFT机器人 大型的、有标记的数据集的可用性是为了利用做有监督的深度学习方法的一个关键要求。但是在RGB-D场景理解的背景下,可用的数据非常少,通常是当前的数据集覆盖了一小范围的场景视图,并且具有有限的语义注释。 为了解决这个问题&#…

数据仓库一分钟

简介 数据仓库(Data Warehouse)简称DW或DWH,是数据库的一种概念上的升级,可以说是为满足新需求设计的一种新数据库,而这个数据库是需容纳更多的数据,更加庞大的数据集,从逻辑上讲数据仓库和数据…

Midjourney API 的对接和使用

“ 阅读本文大概需要 4 分钟。 ” 在人工智能绘图领域,想必大家听说过 Midjourney 的大名吧。 Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作,只要简单输入绘图指令,这个神奇的工具就能在瞬间为我们呈现出对应的图像。无…

Git企业开发控制理论和实操-从入门到深入(七)|企业级开发模型

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

8.7.tensorRT高级(3)封装系列-调试方法、思想讨论

目录 前言1. 模型调试技巧总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-调试方法、思想讨论 课程大纲可看…

知虾shopee数据分析工具:shopee出单的商机利器

当今数字化时代,数据已经成为商业成功的关键要素之一。而Shopee作为东南亚最大的电商平台之一,其强大的数据分析工具正为商家提供了宝贵的市场洞察和决策支持。本文将深入探讨Shopee数据分析工具如何帮助商家抓住商机并取得成功。 洞察消费者需求&#x…

P21~22 第六章 储能元件——电容存储电场能,电感存储磁场能

1、电容元件 a定义 b线性时不变电容元件 c电容的电压与电流关系 i有限则u有限 注意理解面积 d电容的功率和储能 e例一 跃变就是指物体的物理量从有限值变为无限值的过程。 分析上图例题:对于电源波形要吃负无穷到正无穷去刻画。即时间轴要铺满。 有有图控制电…

sql:SQL优化知识点记录(四)

(1)explain之ref介绍 type下的ref是非唯一性索引扫描具体的一个值 ref属性 例如:ti表先加载,const是常量 t1.other_column是个t1表常量 test.t1.ID:test库t1表的ID字段 t1表引用了shared库的t2表的col1字段&#x…