C++ 基本C++;:如何初始化类的结构成员?

C++ 基本C++;:如何初始化类的结构成员?,c++,struct,member,initializer,C++,Struct,Member,Initializer,我找遍了所有的地方,但没有找到答案 我有一个C++类,这些保护成员: struct tm _creationDate; struct tm _expirationDate; struct tm _lockDate; 我想在实例化时初始化它们。如果我把它放在构造函数中: _creationDate = {0}; _expirationDate = {0}; _lockDate = {0}; struct tm creationDate; memset((void*)&

我找遍了所有的地方,但没有找到答案

我有一个C++类,这些保护成员:

 struct tm  _creationDate;
 struct tm  _expirationDate;
 struct tm  _lockDate;
我想在实例化时初始化它们。如果我把它放在构造函数中:

 _creationDate = {0};
 _expirationDate = {0};
 _lockDate = {0};
struct tm creationDate;
memset((void*)&creationDate, 0, sizeof(struct tm));
编译器抱怨:“应在“{”标记之前使用主表达式”

在构造函数顶部的成员初始值设定项列表中,我也找不到这样做的方法。如何做到这一点?谢谢

后续行动: 谢谢你们的回复,伙计们。你们不能在声明中这样做;这是不允许的。所以唯一的方法似乎是memset或单独设置成员。我最后写了一个实用函数来实现这一点。


你可以在声明时这样做

_creationDate = {0}; // set everything to 0's
_creationDate = { StructElement1, StructElement2, ..., StructElement n);
还是像这样

_creationDate = {0}; // set everything to 0's
_creationDate = { StructElement1, StructElement2, ..., StructElement n);
比如

_creationDate = { 0, false, 44.2);
或者在构造函数中,只需调用结构中的每个元素并初始化,例如

_creationData.thing1 = 0;
_creationData.thing2 = false;
_creationData.thing3 = 66.3;

我认为只有在定义结构时,才能这样初始化它:

struct tm a = {0}; // works ok
struct tm b;
b = {0};           // error
一种选择是使用“默认”值

或构造函数中的
memset

 _creationDate = {0};
 _expirationDate = {0};
 _lockDate = {0};
struct tm creationDate;
memset((void*)&creationDate, 0, sizeof(struct tm));

C++03中唯一可能的方法:

class foo
{
    tm _creationDate;
    public:
    foo()
    {
        tm tmp_tm = {0};
        _creationDate = tmp_tm;
    }
};
请注意,这将使用
tmp\u tm
的副本初始化
\u creationDate
,从而调用(很可能是自动生成的)复制构造函数。因此,对于大型结构,您应该坚持使用实用程序函数,因为这不需要复制整个结构


顺便说一句,不应该使用以下划线开头的名称,因为它们是为实现标准库而保留的(供内部使用)谢谢。只有最后一个选项在C++对象中工作。不允许使用带括号的初始化器。谢谢。虽然初始化列表中允许了语法,但是无法初始化{{ 0 }的成员。