第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

C ++靜態(tài)成員變量及其初始化

C ++靜態(tài)成員變量及其初始化

C++
翻翻過去那場雪 2019-09-24 15:14:56
對于C ++類中的靜態(tài)成員變量-初始化在類外部完成。我想知道為什么?任何邏輯推理/約束嗎?還是純粹是傳統(tǒng)的實現(xiàn)方式-該標準不希望更正?我認為在類中進行初始化會更“直觀”,也不會造成混淆。它還使變量具有靜態(tài)和全局性。例如,如果您看到靜態(tài)const成員。
查看完整描述

3 回答

?
慕神8447489

TA貢獻1780條經(jīng)驗 獲得超1個贊

從根本上講,這是因為靜態(tài)成員必須精確地定義在一個翻譯單元中,以便不違反單一定義規(guī)則。如果語言允許類似以下內(nèi)容:


struct Gizmo

{

  static string name = "Foo";

};

然后name將在#include該頭文件的每個轉(zhuǎn)換單元中定義。


C ++確實允許您在聲明中定義不可分割的靜態(tài)成員,但是您仍然必須在單個翻譯單元中包含一個定義,但這只是一個捷徑或語法糖。因此,這是允許的:


struct Gizmo

{

  static const int count = 42;

};

只要a)表達式是const整數(shù)或枚舉類型,b)可以在編譯時對表達式求值,并且c)仍然存在不違反一個定義規(guī)則的定義:


文件:gizmo.cpp


#include "gizmo.h"


const int Gizmo::count;


查看完整回答
反對 回復(fù) 2019-09-24
?
POPMUISE

TA貢獻1765條經(jīng)驗 獲得超5個贊

在C ++中,自開始以來,初始化器的存在是對象定義的專有屬性,即,帶有初始化器的聲明始終是定義(幾乎總是)。

如您所知,C ++程序中使用的每個外部對象都必須在一個翻譯單元中定義一次,并且只能定義一次。允許類內(nèi)初始化程序用于靜態(tài)對象將立即違反此約定:初始化程序?qū)⑦M入頭文件(通常在類定義所在的位置),從而生成同一靜態(tài)對象的多個定義(每個包含頭文件的翻譯單元一個定義) )。當然,這是不可接受的。因此,靜態(tài)類成員的聲明方法完全是“傳統(tǒng)”的:您僅在頭文件中聲明它(即不允許初始化器),然后在您選擇的翻譯單元中定義它(可能使用初始化器) )。

此規(guī)則的一個例外是整數(shù)或枚舉類型的const靜態(tài)類成員,因為此類條目可以用于整數(shù)常量表達式(ICE)。ICE的主要思想是在編譯時對其進行評估,因此不依賴于所涉及對象的定義。這就是為什么整數(shù)或枚舉類型可能會出現(xiàn)此異常的原因。但是對于其他類型,這只會與C ++的基本聲明/定義原理相矛盾。


查看完整回答
反對 回復(fù) 2019-09-24
  • 3 回答
  • 0 關(guān)注
  • 1201 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號