C++ 我想开始使用C++;内联初始化,有什么不好的情况吗?

C++ 我想开始使用C++;内联初始化,有什么不好的情况吗?,c++,c++11,C++,C++11,如果我有这样一个struct: struct A { int i; double d; const bool b; }; 我这样做:A然后我得到非值初始化对象,即,I可以是6,d可以是其他东西b可以是true。为了避免这种情况,我想做以下几点: struct A { int i = 0; double d = 0.0; const bool b = false; }; 使用这种方法作为经验法则有什么不好的地方吗?也许你知道一个情况,当这是不

如果我有这样一个
struct

struct A 
{
    int i;
    double d;
    const bool b;
};
我这样做:
A
然后我得到非值初始化对象,即,
I
可以是
6
d
可以是其他东西
b
可以是
true
。为了避免这种情况,我想做以下几点:

struct A 
{
    int i = 0;
    double d = 0.0;
    const bool b = false;
};
使用这种方法作为经验法则有什么不好的地方吗?也许你知道一个情况,当这是不可取的吗

struct A 
{
    int i = 0;
    double d = 0.0;
    const bool b = false;
};
是正确和简洁的


正确且简洁。

您可以使用构造函数中的初始化列表来完成

struct A 
{
    int i;
    double d;
    const bool b;

    A(int i, double d, bool b) : i(i), d(d), b(b){}
};

您可以通过在构造函数中使用初始化列表来完成

struct A 
{
    int i;
    double d;
    const bool b;

    A(int i, double d, bool b) : i(i), d(d), b(b){}
};

我认为为struct创建默认构造函数看起来更相关<代码>结构A{int i;双d;常量布尔b;A(){i=0;d=0.0;b=false;}这不是问题所在,但您应该按顺序排列成员声明size@vidhugangwar:构造函数使结构成为非POD结构,这在某些用例中可能是不可取的。@vidhugangwar:并且您的解决方案不会编译(因为``b`是const)。。。并使结构无论如何都不聚合。OP方法简洁而正确。@vidhugangwar:如果要使用初始值设定项列表,为什么不对所有成员使用它?这是不一致的。我认为为struct创建默认构造函数看起来更相关<代码>结构A{int i;双d;常量布尔b;A(){i=0;d=0.0;b=false;}这不是问题所在,但您应该按顺序排列成员声明size@vidhugangwar:构造函数使结构成为非POD结构,这在某些用例中可能是不可取的。@vidhugangwar:并且您的解决方案不会编译(因为``b`是const)。。。并使结构无论如何都不聚合。OP方法简洁而正确。@vidhugangwar:如果要使用初始值设定项列表,为什么不对所有成员使用它?这是不一致的仍然保留
A
聚合类型。@Narek:
A()=默认值
;不会(零-)初始化成员仍然保留
A
聚合类型。@Narek:
A()=默认值
;不会(零-)初始化成员。