繁体   English   中英

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

[英]Basic C++: How do I initialize a struct member of a class?

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

我有一个带有这些受保护成员的 C++ 类:

 struct tm  _creationDate;
 struct tm  _expirationDate;
 struct tm  _lockDate;

我想在实例化时初始化它们。 如果我把它放在构造函数中:

 _creationDate = {0};
 _expirationDate = {0};
 _lockDate = {0};

编译器抱怨:“'{' 标记之前的预期主表达式”

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

跟进:感谢您的回复,伙计们。 你不能在声明处做; 这是不允许的。 所以唯一的方法似乎是 memset 或单独设置成员。 我最终编写了一个实用函数来做到这一点。

您可以在这样的声明中执行它们

_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;

http://www.cprogramming.com/tutorial/initialization-lists-c++.html

class C {
    struct tm  _creationDate;
    struct tm  _expirationDate;
    struct tm  _lockDate;
    C() : _creationDate(), ... {}

我认为你只能在定义它时初始化这样的结构:

struct tm a = {0}; // works ok
struct tm b;
b = {0};           // error

一种选择是使用“默认”值

class a
{
    a() : t() {}
    struct tm t;
};

或构造函数中的memset

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;
    }
};

请注意,这将初始化_creationDate与副本tmp_tm ,从而调用(最有可能自动生成)拷贝构造函数。 因此,对于大型结构,您应该坚持使用实用程序函数,因为这不需要复制整个结构。

顺便说一句,以下划线开头的名称(在全局范围内)是为标准库实现保留的。 下划线开头后跟大写字母的名称在任何地方都是保留的。 从技术_creationDate这里的名称_creationDate很好,因为它不在全局范围内,但我仍然建议避免使用前导下划线作为名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM