использовать пустой {} для инициализации вектора отличается? - PullRequest
2 голосов
/ 27 марта 2020

Я вижу, что некоторые люди склонны инициализировать вектор пустым {}, и мне интересно, отличается ли он от прямой инициализации конструктором по умолчанию?

, например:

#include <vector>
#include <iostream>
using namespace std;

int main()
{
    vector<int> vec;
    vector<int> vec2 {};

    cout << sizeof(vec) << " " << sizeof(vec2) << endl; // 24 24
    cout << vec.size() << " " << vec2.size() << endl;   // 0 0 
}

и я проверяю его ассемблерный код, и он показывает, что инициализация вектора с пустым {} генерирует больше кода (https://godbolt.org/z/2BAWU_).

Снимок экрана с кодом ассемблера здесь

Я совершенно новичок в языке C ++, и я был бы признателен, если кто-нибудь может мне помочь.

1 Ответ

4 голосов
/ 27 марта 2020

Использование фигурных скобок значение инициализации . Не используется их инициализация по умолчанию . Как кто-то упоминал в комментариях, они должны генерировать точно такой же код, когда оптимизация включена для vector. Есть заметная разница со встроенными типами, такими как указатели и int; там инициализация по умолчанию ничего не делает, в то время как инициализация значения устанавливает их на nullptr и ноль, соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...