Мне нравится явно инициализировать мои переменные для безопасности (когда вы пишете много кода, это, как правило, делает его намного безопаснее, например, в конце ваш код не падает так сильно).
Для большинства типов, будь то структуры или базовые типы C ++, такие как целые числа, я могу написать следующее:
time_t now = time(); // initialize now to 0
struct foo
{
int param_;
};
foo f = foo(); // initialize f.param_ to 0
Когда я пытаюсь выполнить ту же инициализацию для struct stat
, у меня возникают проблемы:
struct stat s = stat();
В этом случае компилятор C ++ сообщает мне, что stat()
- это функция, и для ее вызова необходимо вызвать параметры X.
Является ли это недостатком этого синтаксиса инициализации?
Примечание: я знаю, что могу сбросить структуру, используя memset()
как в:
struct stat s;
memset(&s, 0, sizeof(s));
Только это бесполезно в случае, подобном этому:
struct foo
{
struct stat s_ = stat();
};
Я также знаю, что могунапишите мою собственную функцию инициализации следующим образом:
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()
выше.