我喜欢显式初始化我的变量以保证安全性(当你编写大量代码时,它通常会使它更加安全,因为你的代码最终不会崩溃。)
对于大多数类型,无论结构还是基本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()
更清洁的方式。
答案 0 :(得分:2)
使用聚合初始化,因为它不要求您使用以下命令指定要初始化变量的类型:
struct stat s_{};
// or
struct stat s_ = {};