c語言符號常量的定義方法 當類中含有常量和靜態(tài)數(shù)據(jù)成員時,如何對它們初始化?
當類中含有常量和靜態(tài)數(shù)據(jù)成員時,如何對它們初始化?類中只能初始化靜態(tài)常量整數(shù)數(shù)據(jù)成員。這是因為,當時人們認為類定義中的數(shù)據(jù)定義是聲明,而不是數(shù)據(jù)定義。僅當對象(變量、常量)由類定義時才定義數(shù)據(jù)。靜態(tài)常
當類中含有常量和靜態(tài)數(shù)據(jù)成員時,如何對它們初始化?
類中只能初始化靜態(tài)常量整數(shù)數(shù)據(jù)成員。
這是因為,當時人們認為類定義中的數(shù)據(jù)定義是聲明,而不是數(shù)據(jù)定義。
僅當對象(變量、常量)由類定義時才定義數(shù)據(jù)。
靜態(tài)常量整數(shù)數(shù)據(jù)成員
1)不是對象的一部分
2)可以生成常量表達式,因此可以在類中初始化。---否則,不適合將其用作數(shù)組的大小。
靜態(tài)常量整數(shù)數(shù)據(jù)成員可用作常量表達式。如果沒有在內(nèi)部定義
,則在沒有定義的情況下不能使用常量表達式。
C 11非靜態(tài)成員變量(常量)可以直接初始化,也可以在初始化表中初始化。
在C 11中初始化非靜態(tài)成員變量(常量)可視為為為變量(常量)分配默認值。
如何理解“即使一個常量靜態(tài)數(shù)據(jù)成員在類內(nèi)部被初始化了,通常情況下也應(yīng)該在類的外部定義下該成員”?
在c入門第五版中,只涉及c 11的特性,因此不支持static const int n。以下答案假設(shè)您的文章來自c入門第五版。
本段中的常量靜態(tài)數(shù)據(jù)成員是指同時添加constexpr和static關(guān)鍵字的數(shù)據(jù)成員。由于向其添加了constexpr,因此可以在類中定義初始值(通常,靜態(tài)成員變量不能在類中定義)。constexpr的特性決定了初始值可以在類中定義,因為constexpr限制它必須是常量表達式??梢栽诰幾g時用相應(yīng)的文本值替換所有constexpr變量。
因此,由constexpr和static關(guān)鍵字修改的數(shù)據(jù)成員實際上并不存在,而是由值替換。我想可能是為了方便??赡蹸只替換相應(yīng)范圍內(nèi)的,所以它只替換類內(nèi)的。因此,添加到類中的帶有constexpr和static關(guān)鍵字的變量實際上并不存在,因此如果需要在類外使用常量靜態(tài)數(shù)據(jù)成員,您還需要在類外定義它
Java中靜態(tài)常量和靜態(tài)變量的區(qū)別是不同的:靜態(tài)變量屬于類,所以也稱為類變量;成員變量屬于對象,所以稱為類變量,也稱為實例變量(object variables)內(nèi)存中的不同位置:靜態(tài)變量存儲在方法區(qū)域的靜態(tài)區(qū)域;成員變量存儲在堆內(nèi)存區(qū)域;成員變量隨著對象(也稱為實例)的創(chuàng)建而存在,隨著對象的消失而消失。靜態(tài)變量可以通過類名或?qū)ο笳{(diào)用;成員變量只能通過對象名調(diào)用。靜態(tài)方法中沒有this關(guān)鍵字。如何理解?非靜態(tài)方法可以同時調(diào)用靜態(tài)和非靜態(tài)成員變量;非靜態(tài)方法可以同時調(diào)用靜態(tài)和非靜態(tài)成員方法。