gpt4 book ai didi

c++ - 为什么变量用最大值而不是零初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:31 26 4
gpt4 key购买 nike

多年没有用C++,现在用test写c++项目。

当我开始调试时,我发现奇怪的是,默认情况下变量没有初始化为零。例如,当我观察我的类未初始化变量(unsigned int)时,我看到它的值 3452816845 insted of expected zeo ...这会导致单元测试出错。我使用这样的初始化:

TEST_METHOD(TestPlus)
{
Entity* entity = new Entity();
entity->mCreateOperator(entity->Plus);
entity->SetContactValue(1);
entity->SetContactValue(2);
entity->mProcessLast();
Assert::IsTrue(entity->GetContactValue((1+2));
}

我有实体类的默认构造函数:

Entity::Entity(void)    {/*some internal array initialization*/}

我认为当我使用 new 关键字时,所有类变量都将由 C++ 运行时初始化为 0..

我错过了什么吗?

最佳答案

你的类的数据成员没有被初始化,特别是因为你明确要求编译器让它们保持未初始化状态。你通过编写一个不初始化它们的默认构造函数来做到这一点

Entity::Entity(void) { /*some internal array initialization*/ }

如果你的类没有用户定义的构造函数,那么这个语法

Entity* entity = new Entity();

会触发新对象的所谓值初始化,这确实会将 Entity 的所有直接标量数据成员设置为零。

但是,就在您编写自己的默认构造函数 Entity::Entity() 的那一刻,您基本上告诉编译器您想抑制 Entity 类的值初始化并且您想手动初始化这些成员。所以现在你必须做到这一点:手动初始化 Entity 的所有直接标量数据成员。由于您没有在构造函数中执行此操作,因此这些成员未初始化。

关于c++ - 为什么变量用最大值而不是零初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18673913/

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