多年来我一直在初衷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的首选方法是什么?
使用
stat s{};
Run Code Online (Sandbox Code Playgroud)
相反,它将在没有任何警告的情况下完成工作.它被称为对象的值初始化.虽然在您的情况下struct stat foo = {0};应该执行聚合初始化(假设您struct stat是聚合),并且其余成员也应该进行值初始化,所以从技术上讲,代码是正确的.
| 归档时间: |
|
| 查看次数: |
2315 次 |
| 最近记录: |