Программирование. Принципы и практика использования C++ Исправленное издание, стр. 133
string s1; // значение по умолчанию: пустая строка ""vector<string> v1; // значение по умолчанию: вектор без элементовvector<string> v2(10); // вектор, по умолчанию содержащий 10 строкВсе это выглядит вполне разумно и работает в соответствии с указанными комментариями. Это достигается за счет того, что классы
vectorstringДля типа
TT()string s1 = string(); // значение по умолчанию: пустая строка ""vector<string> v1 = vector<string>(); // значение по умолчанию: // пустой вектор; без элементовvector<string> v2(10,string()); // вектор, по умолчанию содержащий // 10 строкОднако мы предпочитаем эквивалентный и более краткий стиль.
string s1; // значение по умолчанию: пустая строка ""vector<string> v1; // значение по умолчанию: пустой вектор; // без элементовvector<string> v2(10); // вектор, по умолчанию содержащий 10 строкДля встроенных типов, таких как
intdouble0int()double()0.0
()string s1("Ike"); // объект, инициализированный строкой "Ike"string s2(); // функция, не получающая аргументов и возвращающая // строкуИспользование конструктора, заданного по умолчанию, — это не просто вопрос стиля. Представьте себе, что отказались от инициализации объектов класса
stringvectorstring s;for (int i=0; i<s.size(); ++i) // ой: цикл выполняется неопределенное // количество раз s[i] = toupper(s[i]); // ой: изменяется содержание // случайной ячейки памятиvector<string> v;v.push_back("bad"); // ой: запись по случайному адресуЕсли значения переменных
svstring s1 = "";vector<string> v1(0);vector<string> v2(10,""); // вектор, содержащий 10 пустых строкОднако этот код не кажется нам таким уж хорошим. Для объекта класса
string""0Для дат не существует очевидного значения, заданного по умолчанию. По этой причине мы до сих пор не определяли для класса Date конструктор по умолчанию, но сейчас сделаем это (просто, чтобы показать, что мы можем это сделать).
class Date {public: // ... Date(); // конструктор по умолчанию // ...private: int y; Month m; int d;};Теперь мы должны выбрать дату, заданную по умолчанию. Для этого вполне подходит первый день XXI столетия.
Date::Date() :y(2001), m(Date::jan), d(1){}
const Date& default_date(){ static Date dd(2001,Date::jan,1);