[英]C++ initialization lists multiple initializations
#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.