为了账号安全,请及时绑定邮箱和手机立即绑定

初始化,定义,声明变量之间的区别

初始化,定义,声明变量之间的区别

C++ C
慕丝7291255 2019-12-12 14:50:33
阅读问题之后,我知道了声明和定义之间的区别。那么,这是否意味着定义等于声明加上初始化?
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

宣言

声明通常是指在程序中引入新名称。例如,您可以通过描述新功能的“签名” 来声明新功能:


void xyz();

或声明不完整的类型:


class klass;

struct ztruct;

最后但并非最不重要的一点是,声明一个对象:


int x;

在C ++标准中,在§3.1/ 1中将其描述为:


声明(第7条)可以在翻译单元中引入一个或多个名称,也可以重新声明以前声明引入的名称。


定义

定义是先前声明的名称的定义(或者可以是定义和声明)。例如:


int x;

void xyz() {...}

class klass {...};

struct ztruct {...};

enum { x, y, z };

具体而言,C ++标准在第3.1 / 1节中将其定义为:


声明是一个定义,除非它在未指定函数主体的情况下声明函数(8.4),它包含extern说明符(7.1.1)或链接规范25(7.5),并且既不初始化也不是函数体,它声明一个类定义(9.2,9.4)中的静态数据成员,它是类名声明(9.1),它是不透明枚举声明(7.2),它是模板参数(14.1),它是参数-不是函数定义声明符的函数声明符中的声明(8.3.5),或者它是typedef声明(7.1.3),别名声明(7.1.3),using声明(7.3。)。 3),static_assert声明(条款7),属性声明(条款7),空声明(条款7)或using指令(7.3.4)。


初始化

初始化是指在构造时值的“赋值”。对于type的通用对象,T通常采用以下形式:


T x = i;

但是在C ++中可以是:


T x(i);

甚至:


T x {i};

使用C ++ 11。


结论

那么,这是否意味着定义等于声明加上初始化?


这取决于。关于你在说什么。如果您在谈论一个对象,例如:


int x;

这是没有初始化的定义。相反,以下是带有初始化的定义:


int x = 0;

在某些情况下,谈论“初始化”,“定义”和“声明”是没有意义的。例如,如果您在谈论一个函数,初始化的意义并不大。


因此,答案是否定的:定义并不自动意味着声明加初始化。


查看完整回答
反对 回复 2019-12-12
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

宣言说“这东西存在于某处”:


int foo();       // function

extern int bar;  // variable

struct T

{

   static int baz;  // static member variable

};

定义说:“这东西存在于此;为此做记忆”:


int foo() {}     // function

int bar;         // variable

int T::baz;      // static member variable

在定义对象时,初始化是可选的,并说“这是事物的初始值”:


int bar = 0;     // variable

int T::baz = 42; // static member variable

有时有可能在声明时代替:


struct T

{

   static int baz = 42;

};

…但这正在涉及更复杂的功能。


查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 808 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信