gpt4 book ai didi

C++初始化列出多个初始化

转载 作者:行者123 更新时间:2023-11-27 23:15:13 26 4
gpt4 key购买 nike

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

关于C++初始化列出多个初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16761702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com