Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我想重置一个C++;struct stat,我可以以某种方式使用stat()语法吗?_C++_Initialization_C++14 - Fatal编程技术网

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

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

为了安全起见,我喜欢显式地初始化变量(当您编写大量代码时,通常会使其更加安全,例如,您的代码最终不会崩溃)

<>对于大多数类型,无论是结构还是基本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()
{
    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:好的,这很有意义。:)