亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

初始化,定義,聲明變量之間的區別

初始化,定義,聲明變量之間的區別

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 關注
  • 849 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號