相关疑难解决方法(0)

167
推荐指数
4
解决办法
7万
查看次数

有没有办法使C++结构值初始化所有POD成员变量?

假设我有一个包含POD和非POD成员变量的C++结构:

struct Struct {
    std::string String;
    int Int;
};
Run Code Online (Sandbox Code Playgroud)

为了让我的程序产生可重现的行为,我希望在构造时初始化所有成员变量.我可以使用初始化列表:

 Struct::Struct() : Int() {}
Run Code Online (Sandbox Code Playgroud)

问题是我需要更改我的结构并添加一个新的POD成员变量(比如说bool Bool)我冒险忘记将其添加到初始化列表中.然后在结构构造期间不会对新成员变量进行值初始化.

我也不能使用这个memset()技巧:

Struct::Struct()
{
   memset( this, 0, sizeof( *this ) ); //can break non-POD member variables
}
Run Code Online (Sandbox Code Playgroud)

因为调用memset()覆盖已经构造的非POD成员变量会破坏它们.

有没有办法在没有显式添加初始化的情况下强制执行所有POD成员变量的值初始化?

c++ constructor initialization

7
推荐指数
2
解决办法
3216
查看次数

什么时候C++隐式类型初始化为0?

在与同事讨论之后我对此产生了一些怀疑......

正如标题所要求的那样,何时可以假设内置类型将被初始化为0而不是未知值?

规则是否因c ++标准而异?

c++ initialization built-in-types

6
推荐指数
1
解决办法
1781
查看次数

已分配的阵列已归零

在C++ 11中,当我使用T *array = new T[n];已经归零时使用动态数组(使用gcc 4.7.2,Ubuntu 12.10 64bit).

  1. 这是否受C++ 11规范的限制?
  2. 如何在不归零其项目的情况下分配数组?这可能会快一点.

编辑:我已经检查过了T = int.

gcc cxx-flags:-std=gnu++11 -O3 -ffast-math -fno-rtti

c++ memory-management c++11

4
推荐指数
1
解决办法
302
查看次数

调用不带参数的 C++ 构造函数不会将值设置为 0

有人可以解释为什么我的构造函数在未提供参数时不将分数 c、d、e 值设置为 0 吗?结果是:分数 c=0,0 d=0,6e23 e=6e23,0。

我找到了设置Fraction::Fraction() {}为的解决方法Fraction::Fraction() : m_num(0), m_deno(0) {},但我认为使用Fraction::Fraction() {}意味着用 0 填充值...

class Fraction {
public:
Fraction(double num, double deno);
Fraction(double num);
Fraction();

private:
double m_num;
double m_deno;
};

int main() {

Fraction a(4,5);      // a=4/5
Fraction b(2);        // b=2/1 
Fraction c, // c=0/0
         d, // d=0/6e23
         e; // e=6e23/0
return 0;
}

Fraction::Fraction() {}
Fraction::Fraction(double num) : m_num(num), m_deno(1) {}
Fraction::Fraction(double num, double deno) : m_num(num), m_deno(deno) {}
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
321
查看次数