C static在c 中的運用(強化記憶)

2022-09-21 22:21:13 字數 1348 閱讀 2142

一.static(file static)檔案內靜態定義

未命名的命名空間取代檔案中的靜態宣告:

在標準c++引入命名空間的概念之前,程式需要將名字宣告成static的以使其對於整個檔案有效。在檔案中進行靜態宣告的做法是從c語言繼承而來的。在c語言中,宣告為static的全域性實體在其他檔案外不可見。

warning:在檔案中進行靜態宣告的做法已經被c++標準取消了,現在的做法是使用未命名的命名空間,如下:

namespace {

int i;

等價於 static int 1;

二.static member (靜態成員)

1.類的靜態成員

有的時候類需要它的一些成員與類本身直接相關,而不是與類的各個物件保持關聯。靜態成員函式不與任何物件繫結在一起,它們不包含this指標。作為結果,靜態成員函式不能宣告成const的,而且我們也不能在static函式體內使用this指標。這一限制既適用於this的顯示使用,也對呼叫非靜態成員的隱式使用有效。

2.定義靜態成員

因為靜態資料成員不屬於類的任何乙個物件,所以它們並不是在建立類的物件時被定義的。這意味著它們不是由類的建構函式初始化的。而且一般來說,我們不能在類的內部初始化靜態成員。相反的,必須在類的外部定義和初始化每個靜態成員。和其他物件一樣,乙個靜態成員只能定義一次

doubel account::i = inti(); //要想確保物件只定義一次,最好的辦法是把靜態資料成員的定義與其他非內斂函式的定義放在同乙個檔案中。

即使乙個常量靜態資料成員在類內部被初始化了,通常情況下也應該在類的外部定義一下該成員:

constexpr int a::i; //乙個不帶初始值得靜態成員的定義。

靜態成員可以是不完全型別;靜態成員可以作為預設實參。

3.類模板的static成員

//為了通過類來直接訪問static成員,我們必須引用乙個特定的例項:

foofi;

auto ct = foo::count();

ct = fi.count();

4.繼承與靜態成員

如果基類定義了乙個靜態成員,則在整個繼承體系中只存在該成員的唯一定義。不論從基類中派生出來多個派生類,對於每個靜態成員來說只存在唯一的例項。

5.巢狀類的靜態成員定義

如果巢狀類宣告了乙個靜態成員,則該成員的定義將位於巢狀型別的作用域之外。例如,假設a有乙個靜態成員:

int b::a::i = 1;

三.區域性靜態物件

某些時候,有必要令區域性變數的宣告週期貫穿函式呼叫及之後的時間,可以將區域性變數定義成static型別從而獲得這樣的物件。區域性靜態物件在程式的執行路徑第一次經過物件定義語句時初始化,並且直到程式終止才被銷毀,在此期間即使物件所在的函式結束執行也不會對它有影響。

在C 中運用 SQLite

在c 中運用 sqlite 中小 雙擊滾屏 id,bookname,price values id,bookname,price cmd.parameters.add new sqliteparameter id book.id cmd.parameters.add new sqliteparame...

強化有關C 的函式基礎運用方法

知識點1 強化訓練字串類string 知識點2 繼承和派生的概述 了解 1 2 繼承的優點 減少 的冗餘 提高 的重用性 知識點3 繼承的格式 繼承方式分類 父類個數分類 注意 案例1 公有繼承 public 總結 案例2 保護繼承protected 總結 protected繼承 案例3 私有繼承 ...

中運用 膠水在木雕中的運用技巧

hi,歡迎收看本期 木雕裡的那些事 我是你的解密人,谷藏峰 做木雕時,有時難免會碰到,關鍵部件斷裂的情況,自己辛辛苦苦做了那麼久,就因為這些小缺陷,整個報廢,未免有些可惜。那麼該怎麼辦呢?這個時候,就要用到它了 502膠水 這是我們生活中,粘鞋時會用到的一種速乾膠水。在各種五金雜貨店都能買到。它能在...