簡體   English   中英

C ++初始化列出了多個初始化

[英]C++ initialization lists multiple initializations

C ++

#include <stdio.h>

class a
{ 
    public: 
        int var1; 
        a(int var) 
        {
            var1 = var; 
            printf("set var1 to %d\n", var1);
        } 
}; 
class b: public a 
{ 
    public: 
        int var2; 
        b(int d) : var2(d++), a(var2++)
        {
            printf("d: %d, var2: %d, var1: %d\n", d, var2, var1);
        } 
}; 

int main()
{ 
    int a = 5;
    b obj1(a);  
    printf("%d\n", obj1.var1);
} 

輸出:

set var1 to 0
d: 6, var2: 5, var1: 0
0
[Finished in 0.7s]

為什么在這里a.var1沒有設置為6?

因為C ++忽略了列出成員初始化的順序。 始終在其他成員初始化之前調用基類ctor。 *

因此,我相信您在這里調用了未定義的行為 您將var2作為ctor參數傳遞,但尚未初始化。


*如果允許的話,編譯器應對此發出警告。 例如,使用帶有-Wall標志的GCC編譯代碼會顯示以下消息:

 test.cc: In constructor "b::b(int)": test.cc:16: error: "b::var2" will be initialized after test.cc:17: error: base "a" test.cc:17: error: when initialized here 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM