c 類的初始化函式中的bug

2021-05-22 05:26:42 字數 508 閱讀 6605

c++類中建構函式的作用,簡言之,就是給一些變數設定乙個初值。然後初始值可以在建構函式中設定,也可以在初始化列表中設定。

在初始化列表中設定初值的話,存在乙個非常隱蔽的bug。因為初始化列表的執行順序是和data member的宣告順序一樣的,bug也就是出在這。

看下面這個類:

class x

void cout_x_y()

~x(){}

private:

int x,y; }

可能寫這個類的人是希望先對y賦值,然後再用y的值來給x賦值,但是實際上編譯器執行執行這段**的時候,是先用y對x賦值,然後再用val來對y賦值。所以,出現乙個狀況,當呼叫cout_x_y()的時候,x的值就比較奇怪了。這個bug隱藏得比較深,visual studio 2005對這個是沒有警告,或者錯誤提示。據說g++會給出乙個警告資訊。但是我試了一下,好像並沒有給出提示資訊,難道是g++的版本問題?比較奇怪……但是不管怎麼說,以後這種bug還是要盡量避免,否則除錯起來估計會比較頭疼吧~~

C 中的建構函式 初始化

初始化 兩種形式,或者在函式體裡初始化。class 張三 protected int 飯量 const int 智商 int 小名 你需要知道的知識 int 為引用變數,需要在定義的時候初始化.const為恒量限定符,需要在定義的時候初始化,且const建立之後不允許再次賦值 本 由於上述原因而編譯...

類的初始化(建構函式)

1.類成員為const型別 2.類成員為引用型別 include using namespace std class a void print val private const inti intp int j int main int argc char argv 究其因 const物件或引用只能...

c 中的初始化

當物件建立是就獲得了乙個特定的值,我們就說這個物件被初始化了。c 物件初始化通常有4種形式,但並非每種風格都支援所有型別,下面是對各種風格的總結。通常初始化的4種形式 int units solds 0 int units solds 0 int units solds int units sold...