我可以初始化自己在头文件中的类的数据成员吗?

时间:2015-01-29 17:23:21

标签: c++ initialization

从这篇文章" Initializing C++ Class Members"

它说: 没有其他方法可以将参数传递给m_member

这意味着我们不能。但我不明白我们不能写:

class CMyClass {
    CMember m_member(2);
public:
    CMyClass();
};

在本文中:How do C++ class members get initialized if I don't do it explicitly?

  

它有一个构造函数,允许您指定其初始值   CDynamicString(wchat_t * pstrInitialString)。

硬编码'这写入的注册表项名称使用大括号:

class Registry_Entry{
public:
    Registry_Entry();
    ~Registry_Entry();
    Commit();//Writes data to registry.
    Retrieve();//Reads data from registry;
private:
    CDynamicString m_cKeyName{L"Postal Address"};
    CDynamicString m_cAddress;
};

从我自己的测试中,我们无法使用

CMember m_member(2);
头文件中的

。 但为什么呢?

怎么来的

CDynamicString m_cKeyName{L"Postal Address"};

可以工作吗? (顺便说一句,我怀疑有一个错字。它应该删除" L"。

1 个答案:

答案 0 :(得分:2)

在C ++ 11之前,初始化类的非静态成员的唯一方法是在该类的构造函数中,而不是在类定义中。

C ++ 11放宽了一些限制(并引入了初始化列表,你用它来初始化CDynamicString)但不是全部。并非所有编译器都能赶上更改。因此,你看到一些明显的异常现象。