#c
#c
Вопрос:
У меня очень простой вопрос:
являются (1-м):
std::vector<int> foo{1,2,3};
и (2-й):
std::vector<int> foo({1,2,3});
Строго то же самое? Как и в, имеют ли они точно такую же функциональность и вызывают ли точно такие же функции внутри std::vector?
Есть ли какой-либо случай, когда эти два отличаются в любом другом аналогичном классе контейнера или варианте использования?
Как std::vector различает списки инициализаторов и вызовы конструктора в первом фрагменте кода? Разве фигурные скобки не используются для обоих?
Комментарии:
1. Вы можете найти всю необходимую информацию здесь . Даже если это изложено не самым легко усваиваемым способом.
Ответ №1:
они разные
{} добавляет значения в вектор
() вызывает конструктор все типы конструкторов приведены по ссылке, приведенной ниже
Есть ли какой-либо случай, когда эти два отличаются в любом другом аналогичном классе контейнера или варианте использования?
Когда вы добавляете элемент в вектор, используя такие функции, как push_back() и т. Д. мы используем vec_name.push_back(элемент); // обычный парантез, а не фигурные скобки
когда вы создаете многомерный массив или вектор и инициализируете элементы из его объявления, например, для 2D-массива, это выглядит следующим образом int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};
Два основных варианта использования фигурных круглых скобок в cpp :
- при объявлении сегмента кода, например, для (параметров) { } , main(параметров) {} , function(параметров) и т. Д.
- для инициализации значений в начале
Обычный парантезис используется для передачи параметров или аргументов функции