如何使用C++ 11正确初始化'struct stat'?

Pau*_*ham 6 c++ c++11

多年来我一直在初衷struct stat这样:

#include <sys/stat.h>
struct stat foo = {0};
Run Code Online (Sandbox Code Playgroud)

具体来说,{0}将所有字段设置为零,相当于memset (&foo, NULL, sizeof foo);.现在使用C++ 11,这已经开始产生警告:

foo.cpp:2:19: warning: missing field 'st_mode' initializer [-Wmissing-field-initializers]
  struct stat s = {0};
                    ^
Run Code Online (Sandbox Code Playgroud)

这是因为C++ 11的新初始化器语法,警告暗示我没有初始化所有成员.struct stat在C++ 11中实例化和初始化a的首选方法是什么?

vso*_*tco 9

使用

stat s{};
Run Code Online (Sandbox Code Playgroud)

相反,它将在没有任何警告的情况下完成工作.它被称为对象的值初始化.虽然在您的情况下struct stat foo = {0};应该执行聚合初始化(假设您struct stat聚合),并且其余成员也应该进行值初始化,所以从技术上讲,代码是正确的.