Инициализируйте все переменные определенного типа для определенного значения по умолчанию в C++

В моем коде у меня есть ints, bools, pointers и так далее, у меня также есть некоторый тип, определенный мной с typedefКак я могу управлять инициализацией значения по умолчанию, как это происходит в объектах с contrunctor?

Я хочу быть уверен, что

T var;

если нетронутый, всегда равен моему значению по умолчанию, и мне нравится делать это без разбора каждой строки кода, изменяя значение по умолчанию вручную и без использования макроса препроцессора.

Это возможно? для нового typedef можно определить значение по умолчанию?

3 ответа

Решение

В C++11 вы могли бы написать T var{}; чтобы получить значение инициализации к значению по умолчанию.

В C++03 вы могли бы написать не POD-оболочку, чей конструктор по умолчанию будет вызываться T var;:

template<class T>
struct default_initializer{
  default_initializer() : value() {}
  default_initializer(T const& v) : value(v) {}
  T value;
};

// somewhere in code
default_initializer<T> var; // calls default ctor and initializes 'value'
                            // to its default value

Это позволит вам безопасно инициализировать по умолчанию даже примитивные, POD и агрегатные типы, которые обычно остаются неинициализированными T var; декларация.

Это невозможно для примитивных типов, так как они не имеют конструктора. примитивные типы, которые объявлены в контексте области действия функции, не инициализируются по умолчанию и содержат мусор. Примитивные переменные, которые объявлены в глобальной области видимости как глобальные переменные, всегда инициализируются 0,

Нет способа добиться этого для ints, bools, указатели и другие примитивные типы данных без необходимости писать дополнительный код всякий раз, когда вы объявляете значения таких типов. Но для экземпляров ваших пользовательских классов, есть.

Другие вопросы по тегам