[初]C++ 的 声明&定义&初始化

C++笔记之声明、定义、实现、初始化的区别 在C++编程中,“声明”(declaration)、“定义”(definition)和"实现"(implementation)是三个关键概念,它们在代码结构和编译过程中具有不同的作用。声明是在程序中引入标识符(变量、函数、类等)的存在,但不会为其分配内存或为其提供详细的实现。它告诉编译器某个标识符的名称、类型和签名,使得在其后的代码中可以正确地引用它。定义是在程序中为标识符分配内存空间,以及提供其详细实现的过程。实现是指在类的定义中提供成员函数的具体实现代码。 阅读详情
在C++和Java中,我们在使用一个标识符之前必须对它进行声明。标识符的声明和标识符的定义并不是一回事(虽然绝大数情况下它们看起来并没有什么不同)。
在声明中,除非我们为一个标识符分配了足够的内存,否则这个标识符便没有被定义。
另外,当一个标识符作为一个变量的名称时,我们还将面临的一个问题是,这个变量在定义之时是否得到了缺省的初始值。

所以判定一条语句时候,可以用这个规则:
是否声明-->声明后是否定义(有无分配内存)-->定义后是否缺省初始化(有无初始化0)


下面用我自己写的一个很简单的例子来说明三者之间的关系:
#include <iostream>

using namespace std;

//author:snail
//date:070402

class small{
    public:
        int classVar[10];//[declare]        [define    ]       [not defaylt init!]
        static int arrayVar[10];
        static int classStaticName;//[declare]        [not define]        [not init]
        static int getValue(){return classStaticName;}
};

int small::classStaticName = 1;//class static member must init here!

int small::arrayVar[10] = {1};

int globleVar[10];//[declare]     [define]        [default init]

int main(){
    int methodVar[10];//[declare]     [define]         [not init!]
    static int methodStaticVar[10];//[declare]     [define]        [init!]
    small s;
   
    cout << "globleVar[0] " << globleVar[0] << endl;
    cout << "globleVar[1] " << globleVar[1] << endl;
    cout << "s.classVar[0] " << s.classVar[0] << endl;
    cout << "s.classVar[1] " << s.classVar[1] << endl;
    cout << "small::arrayVar[0] "<< small::arrayVar[0] << endl;
    cout << "small::arrayVar[1] "<< small::arrayVar[1] << endl;
    cout << "small::getValue() " << small::getValue() << endl;
    cout << "small::classStaticName " << small::classStaticName << endl;
    cout << "methodVar[0] " << methodVar[0] << endl;
    cout << "methodVar[1] " << methodVar[1] << endl;
    cout << "methodStaticVar[0] " << methodStaticVar[0] << endl;
    cout << "methodStaticVar[1] " << methodStaticVar[1] << endl;
   
    return 0;
}


输出结果:
globleVar[0] 0            //全局变量 在int globleVar[10];    声明+定义+缺省初始化
globleVar[1] 0  
s.classVar[0] 6204724    //类的非静态成员变量 int classVar[10];   声明+定义+(未缺省初始化)
s.classVar[1] -1208501944
small::arrayVar[0] 0       //类的静态成员变量 static int arrayVar[10]; 声明 + (未定义) + (未缺省初始化),所以必须有另一条语句int small::arrayVar[10] = {1} 定义 + 初始化 !!!
small::arrayVar[1] 0     
small::getValue() 1
small::classStaticName 1
methodVar[0] 134515496   //函数局部变量 int methodVar[10];//[declare];声明+定义+(未缺省初始化)
methodVar[1] 134516988
methodStaticVar[0] 0      //函数静态局部变量 static int methodStaticVar[10]; 声明+定义+缺省初始化
methodStaticVar[1] 0


下列的声明也不是定义:
extern int error_name;    //外部变量
class Student;            //照顾编译器"向前看"的特点
double d(double);         //照顾编译器"向前看"的特点


作者:snail
日期:07年4月2日
参考资料:<<面向对象C++与Java比较教程>>

需要添加: 1  java的声明,定义,初始化     2 C++与java的声明,定义,初始化比较
Zemax实战录——非序列模式下的微透镜阵列仿真与优化 本文详细介绍了在Zemax非序列模式下进行微透镜阵列仿真的完整流程与优化技巧。文章重点阐述了从序列模式切换到非序列模式的必要性,并逐步指导如何搭建光源、阵列与探测器的仿真环境。核心在于通过调整圆锥系数等关键参数优化像差,并增加光线数以提升仿真精度与均匀性,为光学设计提供可靠依据。 阅读详情

相关推荐

CircuitBreaker Resilience4J 介绍

在分布式环境中,我们的应用可能会面临着各种各样的可恢复的异常(比如超时,网络环境异常),此时我们可以利用不断重试的方式来从异常中恢复(Retry Pattern),使整个集群正常运行。然而,也有一些异常比较顽固,突然发生,无法预测,而且很难恢复,并且还会导致级联失败(举个例子,假设一个服务集群的负载非常高,如果这时候集群的一部分挂掉了,还占了很大一部分资源,整个集群都有可能遭殃)。如果我们这时还是不断进行重试的话,结果大多都是失败的。

zzhongcy的专栏 3539

引用、指针和位与运算:C++中的 & 符号应用详解

本篇博客将详细介绍在C++中符号的三种作用。在C++中,可以表示引用、取地址和位与运算。在本文中,我们将分别讨论这三种用法,并提供具体的C++代码示例。

weixin_47712251的博客 2067

opencv简单小项目

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。要开始一个OpenCV项目,你需要安装OpenCV库,这通常可以通过Python的pip包管理器完成。替换为你要加载的图像的实际路径。这个例子展示了OpenCV项目的基本结构,你可以在此基础上添加更多的图像处理功能。如果你需要更详细的指导或代码示例,请告诉我你的具体需求。

youyouxiong的博客 971

C++引用符&的使用(部分来源于网络)

写在前面,引用的特点: 1、一个变量可取多个别名。 2、引用必须初始化。 3、引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。 定义一个变量的引用语法: 类型名 &amp;引用名=某变量名 例如:int n=4; int &amp;m=n; 一、基础引用(取别名) void demo1() { int n=7; int &amp;r=n; r=4; printf("n=%d r=%d\n",n,r); printf("n的地

https://goodlunatic.github.io/ 1010

从BSCAN到BAP:深度解析Tessent MBIST逻辑的协同工作机制与设计考量

本文深入解析了Tessent MBIST逻辑中BSCAN Interface、Logic Group Def、Controller与BAP模块的协同工作机制。文章以一条测试指令的完整路径为例,详细阐述了数据流与控制流如何跨模块、跨时钟域协同工作,并重点探讨了MBIST BAP在协议转换与流量管理中的核心桥梁作用,为芯片内建自测试的集成与调试提供了关键的设计考量和实战技巧。

kappa的博客 479

群晖NAS搭建Git Server避坑指南:从SSH配置到权限管理的完整流程

本文提供了一份详尽的群晖NAS搭建Git Server实战指南。文章从启用并安全配置SSH服务入手,深入解析了用户权限体系设计、SSH连接与仓库初始化、客户端SSH密钥配置等核心步骤,并提供了常见错误排查与生产环境加固方案,帮助开发者成功构建私有、安全的代码托管平台。

rock5的博客 419

C++ 变量的引用 &

创建变量的引用:int &amp;a = b; 引用变量a是变量b的别名;是传址操作,把变量b的数据地址赋值给变量a,a和b指向同一个数据 主要用途:用作函数的形参,通过将引用变量用作参数,函数将使用原始数据而不是其拷贝 void swip(int &amp;a, int &amp;b) //a是i的引用,a和i的数据地址相同;b是j的引用,b和j的数据地址相同 { ...

weixin_30549175的博客 79

用 ABAP CDS Table Function 把复杂计算下沉到 SAP HANA:从定义到 AMDP 实战与 Clean Core 落地

摘要 CDS table function 是 SAP S/4HANA 开发中的关键工具,它允许在 ABAP CDS 中调用由 HANA 原生执行的函数逻辑,并以表形式返回结果集。其核心价值在于:弥补 CDS 表达式不足,将复杂计算(如排序、分组、币种换算等)安全地推送到数据库层执行,同时保持 CDS 的可组合性。实现方式是通过 AMDP 框架,在 ABAP 类中编写 SQLScript 代码。使用时需注意参数设计应区分业务语义与过滤条件,并严格遵守 client-safe 原则以避免跨客户端数据泄露风险。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1002

C++(16):“&”符号

文章主要介绍了C++中的取地址运算符和引用声明符的使用及其特点。取地址运算符(&amp;)用于获取变量的内存地址,返回指针类型,可与指针配合使用。引用声明符(&amp;)用于为变量创建别名,必须初始化且不可为空或重新绑定。引用常用于函数参数传递,避免拷贝并直接修改实参,也用于范围for循环中直接修改容器元素。与指针相比,引用必须初始化、不可为空、不可重新绑定,且无独立内存,直接使用无需解引用。引用作为别名,必须绑定实体,函数参数传递高效,不可空特性使其安全性高于指针,但牺牲了灵活性。

weixin_62774747的博客 1063

量化交易 米筐 多因子合成(回测中使用)

多因子合成 1、因子合成 将一些相关(高、低)的因子合成一个因子 方法: 使用PCA方式(使用于较强相关性) 2、核心代码 将因子 inc_revenue_ttm 和 operating_revenue_growth_ratio_ttm 合成为一个因子 inc_operating from sklearn.decomposition import PCA pca = PCA(n_components=1) # 因子合并 fund['inc_operating'] = pca.fit_transform(fu

廷益_飞鸟的博客 1062

图神经网络实战(7)——图卷积网络(Graph Convolutional Network, GCN)详解与实现

图卷积网络 (Graph Convolutional Network, GCN) 架构由 Kipf 和 Welling 于 2017 年提出,其理念是创建一种适用于图的高效卷积神经网络。在本节中,我们将讨论 Vanilla GNN 架构的局限性,并详细介绍 GCN 的工作原理,通过使用 PyTorch Geometric 在 Cora 和 Facebook Page-Page 数据集上实现 GCN 来验证其性能。

盼小辉丶的博客 2万+

C++中引用(&)的用法和应用实例

对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法。在 c++学习提高篇(3)---隐式指针的文章中我详细介绍了在隐式指针&的用法,其实这两个概念是统一的。 引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵

wping11的专栏 416

第14.8章 高翔博士最新开源框架Lightning-LM源码解读(八):位姿平滑器PoseSmoother深度剖析,从原理到代码实现

本文深度解析了高翔博士开源框架Lightning-LM中的位姿平滑器PoseSmoother模块。该模块通过设置平滑因子,在保证位姿准确性的同时减少突变,使位姿变化更平稳。文章详细讲解了模块功能、数据流程和核心代码实现,包括构造函数、拷贝构造函数以及关键的PushDRPose和PushPose函数。重点分析了位姿平滑算法原理,涉及运动有效性校验、位姿队列维护和平滑因子调节等核心机制。此外还介绍了相关C++语法(如显式构造函数、默认拷贝构造)和优化方向。本解析为SLAM学习者提供了位姿平滑处理的实用实现范例。

行知SLAM 600

C++ 声明、定义、初始化、赋值

C++ 声明、定义、初始化、赋值 参考来源:《C++ primer(第五版)》     在C++中,有以下几个概念一直都让人云里雾里。实际上,在学习语言的过程中,对每个概念了解清晰是非常重要的。    下面就让我们来理清这些概念声明和定义    首先我们要区分 声明 和 定义 的区别。 在《C++ primer(第五版)》中写道: C++语言支持分离式编译,该机制允许将程序分割成若

twdlll的博客 7048

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an &ldquo;advanced algorithms&rdquo; book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ 声明、定义、初始化与赋值

一般我们进行成员变量初始化用两种方法 第一种是通过在构造函数内赋值 class Point { public: Point(){ _x = 0; _y = 0;}; Point( int x, int y ){ _x = 0; _y = 0; } private: int _x, _y; }; 第二种是使用初始化列表 class Point { public: Point():_x(0),_y(0...

天行九歌 4402

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++ 分清定义,声明,初始化

本文试从概念到实例,把c++里的定义、声明和初始化这几个东西讲清楚

qq_44920947的博客 1887

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++ 变量的定义、声明和初始化

C++ 变量的定义、声明和初始化

程永强 4672

C++定义与声明 区别

C++ 声明 定义

sjxbf的专栏 4万+

Qt C++中声明、定义和初始化一维、二维数组(vector容器)(一)

变量或函数的声明、定义 声明:不需要编译器为其分配内存空间; 定义:要求分配内存空间。 声明是告诉编译器,这个变量或函数已经在程序中存在。 对变量而言,声明和定义一起进行: int a;//完成声明和定义 对函数而言,声明和定义可以分离: 声明: void data_func();//可以对一个变量多次声明,不会报错 void data_func(); void data_func(); 定义: void data_func(){}; 一维数组的声明和初始化 1、设置数组长度的默认初始 g_best为

cherry-keven 2万+

C/C++:头文件与cpp文件的声明/定义

一、头文件 1、 一般来说,头文件仅仅用于声明,相应的定义要放在对应的cpp文件中。  声明的内容一般可以是:1. 类定义体;2.类中的成员方法; 3. 类外的函数; 4. 类外的变量;5. 类型。   一个文件(比如main.cpp)包含(#include)了一个头文件(比如item.h),就相当于声明了Item.h中声明的所有内容。 2、但是const常量,inline函数,static函数...

yongjunhe的专栏 5488

声明,定义,初始化,实例化

本文带你升入了解声明,定义,初始化及实例化各自的定义和性质

qq_75270497的博客 1292

声明、定义、初始化与赋值

1 声明、定义、初始化与赋值 为了将程序拆分成多个逻辑部分来编写,C++语言支持分离式编译机制。它允许我们将程序分割为多个文件,每个文件可以独立编译,最后通过链接器来链接在一起形成一个完整的程序。 为了支持分离式编译机制,C++将声明(declaration)与定义(definition)区分开来。有一部分语言并不将两者做严格的区分,而C/C++却做了区分,二者含义也有很大的不同。还有容易混淆的初...

Marshalldong的博客 2748

C++变量 声明、初始化、定义

1、命名空间的using声明 2、标准库类型string 3、标准k

littledouble的专栏 3371

C++声明与定义以及初始化,头文件的书写规范

初始化 初始化:当一个对象被创建的同时获得了特定的值。 1.初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值代替; 2.默认初始化:如果定义变量时没有指定初值,则变量被默认初始化,也即编译器给定了一个默认值,该默认值由数据类型和定义的位置决定; 3.显式初始化:即定义变量时给定初始值; 4.绝大多数类都支持无须显式初始化而定义对象,这样的类提供了一个合适的默认值,但是对于内置类型需要格外注意定义的位置; 内置类型变量的初始化 当内置类型变量在定义时没有

人工智蟑的博客 4431

C语言中的声明、定义、初始化

声明 变量声明规定了变量的类型和名字1 基本形式 任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符(declarator)。2 说明符(一个或多个) 声明表达式列表3 变量声明 int a; unsigned int a; 函数声明 int max() 一个返回值为int类型的函数 指针声明 int *p p是int*型 如果按上一句,p是int*类型,那么有意思的是为什么指针声明不是 int* a; The syntax of the declaration for a

CCPigSnail 5630

C++基础:变量的声明、定义、初始化(对三个不同概念的深入解读)

摘要: 本文对比了Java与C++在变量声明、定义和初始化方面的核心差异。在Java中,这三种概念通常合而为一,变量必定会被初始化(自动或强制);而在C++中,它们被明确区分为不同阶段:声明(如extern)仅告知类型存在,定义才分配存储空间,初始化则可能延迟。关键差异在于: C++允许变量&quot;只声明不定义&quot;(通过extern)和&quot;只定义不初始化&quot;(局部变量可能未初始化); 初始化行为取决于变量位置(函数内外)和类型(内置/类类型),全局变量默认零初始化,局部内置类型变

Laurence的技术博客 1966
上一篇: 迷城国度---久违了的ARPG
下一篇: 刚学C写的东西,纪念下:)
飞羽飞之猪
博客等级 码龄21年 127粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值