gpt4 book ai didi

c++ - MSVC2015 初始化应保持未初始化的类成员

转载 作者:行者123 更新时间:2023-11-28 05:14:16 26 4
gpt4 key购买 nike

我注意到 MSVC2015 初始化了应该留给不确定的数据成员。代码示例和结果:

class A
{
public:
int i;
};

class B
{
public:
B(){}
int i;
};

class C
{
public:
int i;
virtual void vf(){}
};

int main()
{
A a;
B b;
C c;

a.i; //error C4700 uninitialized local variable used
b.i; //ok
c.i; //ok
}

如果我理解正确,在第 1、2、3 种情况下,成员 i 应该被默认初始化,这对非类类型没有任何作用,应该为所有三种情况发出错误。我的理解在这里正确吗?

通过检查程序集,在构造函数中为零类成员生成了一个 memset,为什么 VS 会这样做?在我的理解中,类 X 的隐式默认构造函数的语义应该与 X(){} 相同,对吗?

并且通过添加虚函数,隐式构造函数不再微不足道,但我不知道 ctor 是否微不足道有什么区别。

最佳答案

编译器开关 /sdl 可能是原因。这是一项将内存归零的安全功能。

查看投影属性 -> C++ -> 常规 -> SDL 检查

另请参阅投影属性 -> C++ -> 代码生成中的安全检查 (/GS)。

同时禁用它们,看看会发生什么。

关于c++ - MSVC2015 初始化应保持未初始化的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42978763/

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