Инициализируйте все переменные определенного типа для определенного значения по умолчанию в C++
В моем коде у меня есть int
s, bool
s, pointer
s и так далее, у меня также есть некоторый тип, определенный мной с 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
,
Нет способа добиться этого для int
s, bool
s, указатели и другие примитивные типы данных без необходимости писать дополнительный код всякий раз, когда вы объявляете значения таких типов. Но для экземпляров ваших пользовательских классов, есть.