我想重置一个C ++ struct stat,我可以用某种方式使用stat()语法吗?

时间:2018-06-11 17:19:17

标签: c++ initialization c++14

我喜欢显式初始化我的变量以保证安全性(当你编写大量代码时,它通常会使它更加安全,因为你的代码最终不会崩溃。)

对于大多数类型,无论结构还是基本C ++类型如整数,我都可以编写以下内容:

time_t now = time();  // initialize now to 0

struct foo
{
    int param_;
};
foo f = foo();  // initialize f.param_ to 0

当我尝试对struct stat进行相同的初始化时,我遇到了麻烦:

struct stat s = stat();

在这种情况下,C ++编译器告诉我stat()是一个函数,它需要调用X参数。

这是初始化语法的缺点吗?

注意:我知道我可以使用memset()重置结构,如:

struct stat s;
memset(&s, 0, sizeof(s));

在这样的情况下,只有那个没用:

struct foo
{
    struct stat   s_ = stat();
};

我也知道我可以编写自己的初始化函数,如下所示:

inline struct stat init_stat()
{
    struct stat s;
    memset(&s, 0, sizeof(s));
    return s;
}
struct foo
{
    struct stat s_ = init_stat();
};

我只是更喜欢上面的time_t()foo()更清洁的方式。

1 个答案:

答案 0 :(得分:2)

使用聚合初始化,因为它不要求您使用以下命令指定要初始化变量的类型:

struct stat s_{};
// or
struct stat s_ = {};