Я хочу сбросить структуру stat C ++, могу ли я каким-то образом использовать синтаксис stat ()? - PullRequest
0 голосов
/ 11 июня 2018

Мне нравится явно инициализировать мои переменные для безопасности (когда вы пишете много кода, это, как правило, делает его намного безопаснее, например, в конце ваш код не падает так сильно).

Для большинства типов, будь то структуры или базовые типы 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() выше.

1 Ответ

0 голосов
/ 11 июня 2018

Используйте агрегатную инициализацию, так как не требуется указывать тип, с которым вы хотите инициализировать переменную:

struct stat s_{};
// or
struct stat s_ = {};
...