C++ 我想重置一个C++;struct stat,我可以以某种方式使用stat()语法吗?
为了安全起见,我喜欢显式地初始化变量(当您编写大量代码时,通常会使其更加安全,例如,您的代码最终不会崩溃) <>对于大多数类型,无论是结构还是基本C++类型,如整数,我可以写如下:C++ 我想重置一个C++;struct stat,我可以以某种方式使用stat()语法吗?,c++,initialization,c++14,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 inline struct stat init_stat() { s
time_t now = time(); // initialize now to 0
struct foo
{
int param_;
};
foo f = foo(); // initialize f.param_ to 0
inline struct stat init_stat()
{
struct stat s;
memset(&s, 0, sizeof(s));
return s;
}
struct foo
{
struct stat s_ = init_stat();
};
当我尝试对struct stat
执行相同的初始化时,我遇到了麻烦:
struct stat s = stat();
在此情况下,C++编译器告诉我,<代码> Stand()>代码>是一个函数,它需要调用x参数。 这就是初始化语法的不足吗
注意:我知道我可以使用memset()
重置结构,如下所示:
struct stat s;
memset(&s, 0, sizeof(s));
只有在这种情况下,这是无用的:
struct foo
{
struct stat s_ = stat();
};
我还知道我可以编写自己的初始化函数,如下所示:
time_t now = time(); // initialize now to 0
struct foo
{
int param_;
};
foo f = foo(); // initialize f.param_ to 0
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()
。使用聚合初始化,因为它不需要您指定要初始化变量的类型:
struct stat s_{};
// or
struct stat s_ = {};
我相信stat是一个在Linux头文件中定义的函数。这就是为什么会出现错误。编辑答案
stat
是如何定义的?stat()
是如何定义的?@NathanOliver当你#include
时。你知道stat
可以用这种方式初始化吗?@NathanOliver,这与我的memset(&s#,0,sizeof())相同代码>@NathanOliver有什么理由不能?毕竟它是一个C结构,所以它的所有成员都是默认可构造的。@raket1111直到OP评论说它来自
,我都不知道它是什么。如果它是一个没有默认构造函数的类型,则空的大括号列表初始化将不起作用。@NathanOliver:好的,这很有意义。:)