相关疑难解决方法(0)

964
推荐指数
5
解决办法
11万
查看次数

以下短语在C++中的含义是什么:零,默认和值初始化?

以下短语在C++中的含义是什么:

  • 零初始化,

  • 默认初始化,和

  • 值初始化

C++开发人员应该了解他们什么?

c++ initialization c++-faq

183
推荐指数
2
解决办法
3万
查看次数

在C++ 11中更改了默认初始化的含义?

C++ 2003 8.5/5说:

缺省初始化类型的对象T表示:

- 如果T是非POD类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);

- 如果T是数组类型,则每个元素都是默认初始化的;

- 否则,对象被零初始化.

[重点补充.]

C++ 2011标准将最后一项更改为

- 否则,不执行初始化.

对于某些程序来说,这似乎是一个突破性的变化.这是故意的吗?

编辑

以下是一些激励这个问题的代码:

class Foo {
  public:
    Foo() : m_values() {}

    int m_values[3];
};
Run Code Online (Sandbox Code Playgroud)

在C++ 11之前,我认为m_values在默认构造函数中明确提到将默认初始化该数组.由于数组的元素是标量,我预计这意味着值都被设置为0.

在C++ 11中,似乎不再保证会发生这种情况.但也许正如Mooing Duck在评论中指出的那样,也许这不再是默认初始化的情况,而是一些保留预期行为的其他形式.引文欢迎.

c++ initialization c++-faq language-lawyer c++11

34
推荐指数
1
解决办法
3780
查看次数

什么'值初始化'是什么意思?

可能重复:
C++中的以下短语是什么意思:零,默认和值初始化?

如果我有一个班级,例如:

class Info
{
   int x;
   int y;
};
Run Code Online (Sandbox Code Playgroud)

我曾经创建过一个对象,

Info *p = new Info();
Run Code Online (Sandbox Code Playgroud)

Info旁边的括号是否意味着我正在初始化它?它与此Info *p = new Info;有何不同?

我知道有一个问题可以区分新旧C++语言中的不同含义,但我想知道默认值和值初始化之间的语义差异,例如,值初始化是否意味着将某些内容初始化为零?

c++ default-value value-initialization

18
推荐指数
1
解决办法
8501
查看次数