相关疑难解决方法(0)

C++中的Struct构造函数?

可以struct在C++中有一个构造函数吗?

我一直试图解决这个问题,但我没有得到语法.

c++ constructor struct

343
推荐指数
15
解决办法
52万
查看次数

带空括号的默认构造函数

有没有什么好的理由在C++中调用默认构造函数时,一组空的圆括号(括号)无效?

MyObject  object;  // ok - default ctor
MyObject  object(blah); // ok

MyObject  object();  // error
Run Code Online (Sandbox Code Playgroud)

我似乎每次都自动输入"()".是不是有一个很好的理由不允许这样做?

c++ constructor c++-faq default-constructor most-vexing-parse

192
推荐指数
8
解决办法
3万
查看次数

正确初始化C++结构的方法

我们的代码涉及一个POD(Plain Old Datastructure)结构(它是一个基本的c ++结构,其中包含其他结构和POD变量,需要在开始时进行初始化.)

根据我所读到的,似乎:

myStruct = (MyStruct*)calloc(1, sizeof(MyStruct));
Run Code Online (Sandbox Code Playgroud)

应该将所有值初始化为零,如下所示:

myStruct = new MyStruct();
Run Code Online (Sandbox Code Playgroud)

但是,当以第二种方式初始化结构时,Valgrind后来抱怨"当使用这些变量时,条件跳转或移动取决于未初始化的值".我的理解是否存在缺陷,或者Valgrind是否会误报?

c++ struct valgrind initialization calloc

70
推荐指数
1
解决办法
17万
查看次数

为什么在堆中创建对象或堆栈中的临时对象时,隐式构造函数对结构中的POD进行零初始化?

该标准 C++的书说,对于类类型成员的默认构造函数被隐式生成默认构造函数调用,但内建类型不被初始化.但是,在此测试程序中,当在堆中分配对象或使用临时对象时,我得到意外的结果:

#include<iostream>


struct Container
{
    int n;
};

int main()
{
    Container c;
    std::cout << "[STACK] Num: " << c.n << std::endl;

    Container *pc = new Container();
    std::cout << "[HEAP]  Num: " << pc->n << std::endl;
    delete pc;

    Container tc = Container();
    std::cout << "[TEMP]  Num: " << tc.n << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

[STACK] Num: -1079504552
[HEAP]  Num: 0
[TEMP]  Num: 0
Run Code Online (Sandbox Code Playgroud)

这是一些编译器特定的行为吗?我真的不打算依赖它,但我很想知道为什么会这样,特别是第三种情况.

c++ constructor initialization default-constructor object-initialization

29
推荐指数
2
解决办法
1万
查看次数