从这篇文章" 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"。
答案 0 :(得分:2)
在C ++ 11之前,初始化类的非静态成员的唯一方法是在该类的构造函数中,而不是在类定义中。
C ++ 11放宽了一些限制(并引入了初始化列表,你用它来初始化CDynamicString)但不是全部。并非所有编译器都能赶上更改。因此,你看到一些明显的异常现象。