C++基本概念总结——声明(declaration)和定义(definition)

C++常用术语及其英文翻译的含义和简单用途总结(二) (1)地址(address)是一个数字,根据它可以找到内存中的一个字节。 (2)别名声明(alies declaration)为一种类型定义一个同义词:使用“名字 = 类型”的格式将名字作为该类型的同义词,行使相同的功能。  (3)算术类型(arithmetic type)布尔值、字符、整数、浮点数等内置类型。 (4)数组(array)是一种数据结构,存放着一组未命名 阅读详情

术语“声明”和“定义”的区别,可以简单的归纳为:涉及内存分配的就是“定义”,否则就是“声明”。

下面代码是声明和定义的举例:

class B; // 声明。仅声明 B 是一个类,不涉及 B 的对象内存分配

class A{ // 从这里直到“}”结束,是对类 A 的定义。涉及到 A 的对象的内存大小
public:
	void f1(); // 声明。不涉及函数 f1 的内存分配
	inline void f2(){ } // 定义。涉及函数 f2 的代码段内存分配

private:
	static int s_Id; // 声明。因为静态成员变量不属于对象的内容,不涉及对象的内存大小
	B * m_pB; // 定义。涉及成员变量 m_pB 的内存分配
};

int A::s_Id = 1; // 定义。涉及静态变量的内存分配

void A::f1()  // 定义。A::f1 函数的实现体,涉及代码段内存分配
{
}

typedef int u32; // 定义。涉及 u32 类型的对象的内存大小

int i1; // 定义。涉及变量i1的内存分配
extern int i2; // 声明。不会分配内存

void Func1(); // 声明。不会分配内存
extern void Func2(); // 声明。不会分配内存

void func() // 定义。涉及函数func的代码段内存分配
{
	int i3; // 定义
	extern int i4; // 声明。i4是一个全局变量
}

此外,“声明”和“定义”还有一个区别:“声明”可以有多次,但“定义”只能有一次。

当然,还有一个概念需要注意,即:“定义”也是一个“声明”。例如下面代码:

static void func2(); // 这行声明是多余的,因为下面已经有了函数 func2 的定义,也就是有了声明。
                        // 即使没有这行,在下面 func3 中调用 func2 也不会编译失败。

static void func2()
{
}

void func3()
{
	func2();
}

如果换一下 func2 定义的位置,声明就是必要的:

static void func2(); // 这行声明是必要的,因为 func2 的定义放在了 func3 的后面。
                        // 如果没有这行,在编译 func3 时,编译器不知道 func2 的声明。
                        // 此时有的编译器会报错,而有的编译器会自动为 func2 实现一个默认的声明。

void func3()
{
	func2();
}

static void func2()
{
}
C++中definition与declaration的区别 翻了好几篇关于definition与declaration和博客,都写的很坑人 ,看来我得写一篇了,避免很多新手一入门就被坑了。definition是通过declaration完整的定义了实体,每个declaration都是definition。 阅读详情

相关推荐

Java写项目前的准备工作指南(技术栈选择 环境搭建和工具配置 项目结构设计与模块划分)

在开始编写一个 Java 项目之前,做好充分的准备工作是至关重要的。很多初学者可能在没有清晰规划的情况下就开始编写代码,导致项目开发进度缓慢、结构混乱,甚至最终无法按预期完成。而事实上,项目的成功不仅仅取决于编码能力,还包括项目初期的规划和准备。准备工作是确保项目顺利进行的基础,它包括技术选型、环境搭建、需求分析、团队协作及项目管理等多个方面。通过这些准备,我们可以确保项目的开发不仅高效而且有可维护性,最终能交付出高质量的代码。在项目开发过程中,异常处理是非常关键的一部分。

eternal__day的博客 1187

简单说,教你彻底理解C++中声明和定义的区别!

声明与定义的区别在于,声明是让变量的名字和类型被程序所知,而定义比声明多申请了一个内存空间。要想只声明而不定义变量,就需要在变量类型前加上extern关键字。否则就是声明且定义。任何初始化过的变量都是定义。

weixin_49503250的博客 1445

Overleaf+EndNote+BibTeX:手把手搞定Elsevier期刊投稿的参考文献格式(避坑指南)

本文详细介绍了如何利用Overleaf、EndNote和BibTeX三大工具无缝协作,解决Elsevier期刊投稿中的参考文献格式问题。从工具链配置、文献库导出、BibTeX文件优化到Overleaf集成与编译,提供全流程指南和常见问题解决方案,帮助学术新手高效完成Elsevier期刊投稿。

weixin_30616969的博客 509

C++ 声明与定义的区别

一,声明与定义的区别 声明是将一个名称引入程序。定义提供了一个实体在程序中的唯一描述,涉及到内存空间的分配以及初始值的设定。声明和定义有时是同时存在的。 1,定义也是声明,extern声明不是定义,即不分配存储空间。 int a = 10; //定义就是声明 extern int b; //声明,不是定义 注意:如果使用extern关键字时,对变量进行了初始化,那就是定义。 ex

个人技术博客 9948

大模型运维实战:从GPU选型到推理服务稳定落地

大模型服务进入生产环境后,运维对象从传统进程转向GPU显存、KV Cache、推理吞吐等动态资源。显存利用率、首token延迟、并发队列深度等指标,直接影响模型服务的质量与成本。理解推理框架的内存分配机制、掌握监控告警与自动化扩容手段,是保障服务稳定的关键。这类能力广泛应用于企业私有化部署、智能客服、知识库问答等场景,帮助运维团队从被动救火转向主动容量规划与性能调优。本文围绕大模型运维的完整路线,梳理从硬件选型、推理部署到监控排障的实战经验,并算清一份真实项目的长期成本账。

weixin_29054245的博客 238

五分钟搞懂游戏开发中的抗锯齿算法

常见抗锯齿算法总结锯齿由来抗锯齿算法SSAAMSAACSAA 锯齿由来 场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有一个非常重要的阶段,就是光栅化,光栅化主要的作用是将顶点数据的不连续性通过插值计算,将两个顶点之间不存在的点进行弥补,然后实现到屏幕像素点上的一一映射。如图,现在要在屏幕上绘制一...

绿洲守望者 1万+

[转载]C++中声明与定义的区别

C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中。它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能。什么东西又可以放在cpp文件中。如果你忘记了或是压根就不明白,那么读过此文你会清晰无比!! 首先谈下声明与定义的区别。 声明是将一个名称引入程序。定义提供了一个实体在程序中的唯一描述。声明和定义有时是...

weixin_30468137的博客 404

2019年上交电院计算机直博保研经历

本人选报的是上交六月一日在武汉举办的直博选拔,五月三十一日到达酒店,地点在武汉大学旁边(PS:上交是不管住宿、来回车票的,~划重点~包括夏令营),入住后当然是紧张的准备英语面试等等内容了,当天我是排在了下午面试,感觉还很好,上午可以多睡一会,最好能够去踩踩点上午,然后下午面试一定要早去,说是一点开始,但是老师十二点半就开始让学生进去了,有一个同学排在第二个,但是当时叫到他时还不到一点,没到,最后据...

LifeMaker的博客 4891

c++中定义和声明的区别

一.基本理解1.定义和声明的简单说明a.声明就是指给除了当前变量或者函数,或者类什么的名字,不给其中的内容,就是先告诉你有这样一个什么类型的变量或者函数,但是这个变量或者函数的具体信息却是不知道的。就好比跟你介绍一个人的时候,声明就是只告诉你这个人叫什么,但是缺不给你说这个人到底怎么样,他有哪些优点,缺点,喜好问题是什么的。b.定义就不一样了,定义直接告诉你了所有的东西,这个变量是什么,这个函数是...

柯南的博客 1万+

Python 包安装报错:ERROR: No matching distribution found for xxx 的全面排查指南

本文全面解析Python包安装时常见的`ERROR: No matching distribution found for xxx`报错。从检查包名拼写、网络与镜像源配置,到深入分析Python版本、操作系统等环境兼容性问题,提供了从简到繁的排查步骤。文章还介绍了使用`pip debug`、`-v`参数等高级诊断工具,并给出了更换包管理器、使用Docker等终极解决方案,帮助开发者高效解决依赖安装难题。

p8q9r0的博客 895

数学之美:欣赏超越数e

文章目录一、e为何物?二、利息与e的关系1、利息问题2、计算利息3、欣赏螺旋线(1)螺旋线概述(2)绘制螺旋线三、e和π 一、e为何物? e是一个无限不循环小数,其值约等于2.718281828…,它是一个超越数,有时也称为欧拉数(Euler’s Number)。 以e为底的对数称为自然对数(Natural Logarithm),数学中使用自然这个词的还有自然数(Natural Number)。 这里的“自然”并不是现代人所习惯的“大自然”,而是有点儿“天然存在,非人为”的意思。 二、利息与e的关系

howard2005的专栏 1715

变量的声明(Declaration)与定义(Definition)的区别

变量定义(Definition)**是两个不同的概念,虽然有时候它们会同时发生,但在某些情况下需要严格区分。在 C/C++ 中,**变量声明(Declaration)同样的概念也适用于函数。

zjkyeah的博客 1453

Python蓝色跳动的爱心(完整代码)

Python语言实现蓝色跳动的爱心的完整代码。 代码分析 这段代码使用了 库来创建一个动态的爱心图案,并在屏幕上显示带有动态效果的“我爱你”字样。以下是对这段代码的详细分析: 用于创建图形用户界面(GUI)。 用于生成随机数,主要用于控制爱心图案的扩散效果。 中的 , , , 用于数学计算,生成爱心形状和扩散效果。 包含了 等常量,用于控制控件的对齐方式。 2. 全局变量定义 , : 定义画布的大小。 , : 爱心的中心坐标。 : 用于定义爱心形状的缩放

AIGC 1917

C++ 变量声明(Declaration)和定义(Definition)的区别

C++ 变量声明(Declaration)和定义(Definition)的区别

m0_63951116的博客 748

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java不分声明和定义,小谈声明(Declaration)和定义(Definition)

1、变量的声明有两种情况: 一种是需要建立存储空间的。例如:int a 在声明的时候就已建立了存储空间。2、另一种是不必建立存储空间。例如:extern int a 其中 变量a是在别的文件中定义的。例一:Declaration.A construct which associates attributes to a variable name or function. No storage is...

weixin_42504058的博客 1344

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

简单明了的区分C++ C语言中声明(declaration)、定义(definition)、签名(signature)的区别

何为声明(declaration)? 告诉编译器某个东西的类型和名称,即不提供存储的位置和具体实现的细节。 extern itn x; // 变量声明 std::size_t func(int num); // 函数声明 class Widget; // 类声明 template<typename T> // 模板声明 class Student; 何为定义(definitio..

Steve Ellison 3446

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C语言释疑3:声明Declaration与定义Definition

要弄懂这两者,其实没啥大的困难。可是,至少有半数以上的C书没能分清。有的书在某一章节里把这个问题说清楚了,可在其它章节里却乱说一气。真是无奈。这两者都是对实体Object的操作。

bucenggaibian的博客 307

声明(declaration),定义(definition),以及初始化(initialization)

c++中的一个重要思想是类型。但无论是自定义的类型还是自带的基本类型,对于变量和函数的声明,定义,及初始化都是必不可少的。今天读完了《C++primer》中对于变量和基本类型的描述,似懂非懂的感受让我有些不爽,那末,就来总结一下声明,定义,以及初始化吧。 下面就来看看这三个概念: 声明(declaration):Type_name Variable_name1,Variable_name2..

nonsense的专栏 1535

c++中,声明(Declaration)与定义(Definition)有什么不同?

C++中声明与定义的核心区别在于:声明仅引入符号名称而不分配资源(如extern int x;或函数原型),可重复使用;而定义会创建实体并分配内存或提供实现(如变量初始化、函数实现),必须遵循单一定义规则(ODR)。类定义既是声明也是定义,因其完整描述类型结构但不直接分配对象内存。编译器处理时,声明仅记录符号,定义则生成实际代码或内存分配。

教学 & 技术专栏 300

c++的定义(definition)和声明(declaration)之间的区别

如果你忘记定义某个已被声明和引用的东西,那么链接器不知道要链接到什么,并会抱怨缺少符号。如果你定义了某物超过一次,那么链接器不知道应该链接到哪个定义,并会抱怨重复符号。声明是编译器接受对该标识符的引用所需的内容。它是链接器为了将引用链接到这些实体所需要的内容。(换句话说,“前向声明”是一个误称,因为在 C++ 中没有其他形式的类声明。由于关于类声明与类定义在 C++ 中的区别争论不断,我将在这里引用 C++ 标准的一段话。声明是一个定义,除非它 […] 是一个类名声明 […定义可以用在声明的地方。

liluo0815481的博客 284

声明和定义 Declaration & Definition

“声明”向计算机介绍名字,它说,“这个名字是什么意思”。“定义”为这个名字分配存储空间声明常常使用extern关键字,如果我们只是声明变量而不是定义它,则要求使用extern,对于函数声明,extern是可选的,不带函数体的函数名连同参数表或返回值,自动作为一个声明。定义也可以是声明。如果该编译器还没有看到过名字A,程序员定义int A,则编译器马上为这个名字分配存储空间。

fanhj__2007的专栏 575

【自用】C++为什么要在头文件(.h)里声明变量,然后在源文件(.cpp)里定义和调用它?为什么不能像Python一样在一个文件内实现变量的定义和调用?

在 C++ 中,变量和函数的声明和定义通常被分离到头文件(.h/.hpp)和源文件(.cpp)中,而 Python 可以直接在一个文件内定义和调用。这种差异源于两种语言的编译模型、设计目标和工程实践的不同。

dayang9605的博客 1064

C++:申明Declaration与定义Definition的本质与区别

定义则是实际创建变量或函数的过程,包括分配内存给变量、给出函数的具体实现和构造/析构函数等内容。定义通常只能在一个特定的位置,比如在函数内部或源文件中。// 在源文件中定义变量并初始化// 定义函数// 在源文件中定义类public:// 构造函数和成员变量的定义。

m0_49968063的博客 652

C++: 关于function的declaration与definition的关系(函数声明和定义的关系)(并附一篇转载文章)

以下材料都来源于C++ primer 5th edition 1(Chap 6):重要概念(有时问题想不明白可以带着这个概念再去思考) A function is a block of code with a name.// We execute the code by calling the function. 2(2.2.2:Variable Declarations and

tong_xin2010的专栏 2822

函数原型(Function Prototype)、函数定义(Function Definition)和函数声明(Function Declaration)

函数原型(Function Prototype)、函数定义(Function Definition)和函数声明(Function Declaration)在C和C++等编程语言中扮演着不同的角色,但它们有时在概念上可能会有些重叠。

HYPERRION的博客 3361

声明&定义

本文阐述了C语言中声明(declaration)、定义(definition)与暂定定义(tentative definition)的关系与区别。核心要点包括:1)声明是广义概念,定义和暂定定义都是其子类;2)文件作用域的int a;属于暂定定义,若无其他定义则最终转为零初始化定义;3)函数内部的int a;直接就是定义;4)extern int a;仅为声明不分配存储;5)带初始化的int a=10;必定是定义。特别强调文件作用域int a;的"暂定"特性是C标准明确规定,需同时满足外部链接、无其他定义等

rainsssssss的博客 327
上一篇: 写注释
下一篇: C++基本概念总结——重载(overload)和重写(override)
林 文
博客等级 码龄18年 14粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值