[英]How do I properly initialize 'struct stat' using C++11?
多年來我一直在初始化我的struct stat
如下所示:
#include <sys/stat.h>
struct stat foo = {0};
具體來說, {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};
^
這是因為C ++ 11的新初始化器語法,警告暗示我沒有初始化所有成員。 在C ++ 11中實例化和初始化struct stat
的首選方法是什么?
如果您的編譯器較舊且不支持struct s{}
語法,您仍可以使用C99語法: struct stat s = { .st_dev = 0 };
甚至失敗,或者你必須擦除一個, memset( &s, 0, sizeof(struct stat) );
永遠都會有用。
這可能源於一個誤解{0}
的案例嗎? 你知道0
實際上並不意味着“將所有字段設置為零”,對吧? 這意味着“將第一個字段設置為零”......所有其他字段都留給語言的一時興起(正如它所發生的那樣,無論如何都會將它們初始化為零)。
struct stat foo = {}
會更准確地描述你的意圖,我懷疑它也會處理警告。
當然,現在,通過編寫struct stat foo{};
可以非常清楚struct stat foo{};
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.