代码之家  ›  专栏  ›  技术社区  ›  deft_code

默认初始化整数成员时是否首选空初始值设定项?

  •  5
  • deft_code  · 技术社区  · 16 年前

    comment by GMan 那个

    class A
    {
    public:
       A() :
          m_ptr() // m_ptr is implicitly initialized to NULL
       { }
    };
    

    class A
    {
    public:
       A() :
          m_ptr(NULL) // m_ptr is explicitly initialized to NULL
       { }
    };
    

    NULL 在第一个例子中。

    格曼说得对吗?这可能有点主观,所以 可能更合适。

    另外,如果您喜欢空初始值设定项,这是否适用于其他整数成员?

    class B
    {
    public:
       B() :
          m_count(),
          m_elapsed_secs()
       {}
    private:
       std::size_t m_count;
       float m_elapsed_secs;  //the elapsed time since instantiation
    };
    

    当然,请解释一下为什么一种观点比另一种更受欢迎。

    4 回复  |  直到 9 年前
        1
  •  7
  •   jamesdlin    16 年前

    我更喜欢直白。正如这个问题的一些错误答案所表明的,并不是每个人都清楚, int() int(0) 是等价的。

    我认为不提供显式值的好处是,如果您更改了类型,就不需要重新访问初始化列表。

        2
  •  2
  •   Community Mohan Dere    9 年前

    NULL ; 我只是碰巧用了0代替了0,但这是个有趣的问题。

    可能只是风格的问题,但需要注意的是, as Johannes did 不仅仅是句法风格;他们做不同的事情。把这些不同的东西弄得一模一样很容易。

    我更喜欢初始化值,因为我不参与初始化值的过程;我只是说“被初始化”。相反,一旦你引入一个值,你就影响了值的初始化方式。

    清晰地 最好选一个更适合你的。

        3
  •  2
  •   Kirill V. Lyadvinsky    16 年前

    在编写模板类以默认初始化依赖类型的成员时,需要进行默认初始化。对于其他情况,如果希望默认初始化成员,则没有真正的区别。但在某些情况下,您希望获得非默认行为。

    默认初始化不适用时的一个示例:

    struct X {
      HANDLE some_file_handle;
      // note that INVALID_HANDLE_VALUE is not equal to 0 in Windows
      X() : some_file_handle( INVALID_HANDLE_VALUE ) {} 
    };
    

    NULL VS缺省初始化,我还有一个例子:在VisualStudio 2010中,它被声明为某种与C++ 0x一致的一致性。 nullptr 空PTR

        4
  •  -1
  •   Jordan    16 年前

    我觉得它们是不同的东西,你是不是很困惑 NULL 具有 void 意思 int main() 与相同 int main(void) int main(NULL) (C++中的) 无效的

    推荐文章