Почему следующая программа
#include <iostream>
#include <initializer_list>
template<typename T>
struct A {
A(std::initializer_list<T> list) {
std::cout << "list" << '\n';
}
A(const A& a) {
std::cout << "copy" << '\n';
}
A& operator=(const A& a) {
std::cout << "copy assignment" << '\n';
return *this;
}
A& operator=(A&& a) noexcept {
std::cout << "move assignment" << '\n';
return *this;
}
};
int main() {
A<int> a{};
auto b = A{a,a};
}
выводит
list
copy
copy
list
?
А что тут неясно?
Первая строка - при создании a
, вторая - при подготовке инициализатора для b
- копирование двух a
, третья - при создании b
из списка инициализации...
здесь
int main() {
A<int> a{};
auto b = A{a,a};
}
происходит следующее:
строка A<int> a{}; - создается лист а, при этом
вызывается A(std::initializer_list<T> list) {std::cout << "list" << '\n';}
выводится "list"
строка auto b = A{a,a}; - создается лист листов, в который 2 раза добавляется
созданный в предидущей строке а,
так как созданный а - это A<int> (лист)
поэтому
дважды вызывается A(const A& a) {std::cout << "copy" << '\n';}
при создании 2-х а для A{a,a}
выводится "copy", "copy"
затем вызывается
A(std::initializer_list<T> list) {std::cout << "list" << '\n';}
при создании самого A{a,a}, который является листом
выводится "list"
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Правильно ли я понимаю, что массив создается и на куче и на стеке, но как он выбирает, куда ему класть значенияИли он кладет первые три элемента...
Сделал частитчно менеджер загрузки спрайтов и моделей 3dЗагружается через load_manager
Задача: организовать максимально простое программное добавление/удаление строк в таблицу