我什么时候必须使用初始化列表来初始化C++类成员?

Tom*_*Tom 5 c++ stl initialization map

假设我有 std::map< std::string, std::string > m_someMapA类的私有成员变量

两个问题:(我问的唯一原因是因为我遇到过这样的代码)

  1. 这条线的目的是什么:

    A::A() : m_someMap()
    
    Run Code Online (Sandbox Code Playgroud)

    现在我知道这是初始化,但你必须这样做吗?我糊涂了.

  2. 什么是默认值std::map< std::string, std::string > m_someMap,C#还定义int,double等始终初始化为defualt 0且对象为null(至少在大多数情况下)那么C++中的规则是什么?是对象初始化为defualt为null和原语为垃圾?当然我正在考虑实例变量.

编辑:

另外,既然大多数人都指出这是一种风格选择而不是必要的,那么:

A :: A():m_someMap(),m_someint(0),m_somebool(false)

Dan*_*nas 12

m_somemap

  1. 你不必.
  2. 如果省略它会得到什么:一个空的std::map< std::string, std::string >,即该地图的有效实例,其中没有元素.

m_somebool

  1. 您必须将其初始化为true或者false如果您希望它具有已知值.布尔值是"普通的旧数据类型",它们没有构造函数的概念.此外,C++语言没有为非显式初始化的布尔值指定默认值.
  2. 如果省略它会得到什么:具有未指定值的布尔成员.您不能这样做,以后再使用它的值.因此,强烈建议您初始化此类型的所有值.

m_someint

  1. 如果希望它具有已知值,则必须将其初始化为某个整数值.整数是"普通旧数据类型",它们没有构造函数的概念.此外,C++语言没有为非显式初始化的整数指定默认值.
  2. 如果省略它会得到什么:具有未指定值的int成员.您不能这样做,以后再使用它的值.因此,强烈建议您初始化此类型的所有值.