繁体   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