Блин, злой. Почему-то все время считал, (кажется, вычитав в одной книге!)
что:
std::vector<char> vec(1024);
Сделает только RESERVE памяти вектора. Т.е. всего лишь задаст его capacity.
Всегда после этого зазря звал еще и resize(xyz).
Сегодня взял после этого конструктора .size() и... узнал, что такая форма конструктора реально аллоцирует (выделяет)
элементы вектора. Более того, вектор _всегда_ принудительно обнуляется, о чем я тоже не знал. Его обнуление, AFAIK нигде не прописано.
Здравствуйте, Аноним, Вы писали:
А>Ткните носом, где я и что не дочитал.
в стандарте, вестимо:
explicit vector(size_type n);
3 Effects: Constructs a vector with n default constructed elements.
4 Requires: T shall be DefaultConstructible.
5 Complexity: Linear in n.
Здравствуйте, Аноним, Вы писали:
А>Сегодня взял после этого конструктора .size() и... узнал, что такая форма конструктора реально аллоцирует (выделяет) А>элементы вектора. Более того, вектор _всегда_ принудительно обнуляется, о чем я тоже не знал. Его обнуление, AFAIK нигде не прописано.
А>Ткните носом, где я и что не дочитал.
vector( size_type num, const TYPE& val = TYPE() );
Т.е. по умолчанию для каждого элемента вызывается конструктор. Обычно этот конструктор и обнуляет.
А>Сделает только RESERVE памяти вектора. Т.е. всего лишь задаст его capacity.
Кстати сам до сих пор постоянно путаюсь , потому как приходится использовать и std::vector и адобовский K2Vector
K2Vector is an implementation of STL's vector class with two differences. 1) the K2Vector(uint32) ctor reserves space instead of resizing the array 2)...
J>explicit vector(size_type n);
J>3 Effects: Constructs a vector with n default constructed elements.
J>4 Requires: T shall be DefaultConstructible.
Ну да, вообще-то. По стандарту я поискал, но как-то не вывел из этого,
Что он должен в случае интегральных типов заполняться нулем.
Я думал там будет garbage, что оставляет после себя malloc().
То есть, сконструированный по умолчанию интегральный тип определяется как бинарный 0?
А>То есть, сконструированный по умолчанию интегральный тип определяется как бинарный 0?
Точно.
int a = int();
даёт 0 в a. Сцуууукоооо.. =)
p.s.
Чудным странностям плюсов не перестану поражаться.
Не, можно конечно стандарт курить почаще.
Но, однако, если сконструировать в куче или на стеке:
class TheClazz
{
int field1;
int field2;
int field3;
};
TheClazz object;
И не написать инициализацию вручную, то в полях класса будет garbage...
То есть поля по умолчанию нулем не инициализируются, как это следовало бы ожидать по уму,
и как это и сделано в языках Delphi, Java, C# .
А> class TheClazz
А> {
А> int field1;
А> int field2;
А> int field3;
А> };
А> TheClazz object;
А>
Если написать так:
TheClazz object = TheClazz object();
то занулится...
Так что полная аналогия для всях POD...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Аноним, Вы писали:
J>>в стандарте, вестимо: J>>
J>>explicit vector(size_type n);
J>>3 Effects: Constructs a vector with n default constructed elements.
J>>4 Requires: T shall be DefaultConstructible.
А>Ну да, вообще-то. По стандарту я поискал, но как-то не вывел из этого, А>Что он должен в случае интегральных типов заполняться нулем. А>Я думал там будет garbage, что оставляет после себя malloc().
В стандарте тоже все это прописано, поищи default constructed.
А>То есть, сконструированный по умолчанию интегральный тип определяется как бинарный 0?
Здравствуйте, <Аноним>, Вы писали:
А>даёт 0 в a. Сцуууукоооо.. =) А>Чудным странностям плюсов не перестану поражаться. А>Чудны творения твои, Страуструпина...
Учи азы!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока