new ( <pointer> ) ClassName(...)
Вот так делать - это нормально?Вполне
И что в таком случае возвращается, указатель на функцию или сама функция?Функциональный объект. Лямбда — не функция, она может быть приведена к указателю на функцию в некоторых случаях.
Если возвращается указатель, то где хранится сама функция, в куче или стеке?«Функция» лямбды хранится там же, где и остальной код. На лету ничего не собирается и не компилируется. Лямбда это синтаксический сахар для объявления класса с перегруженым оператором вызова функции.
И еще один вопрос, по этой же теме:lambda имеет уникальный тип. Это не функция (но может быть приведена к ней в данном случае).
Это сокращенная запись вот такой конструкции:
Или что то другое?
Что является результатом данной строки
И как производить обращение к элементам, в таком случае?
list<vector<string>> lvs {{"Hello", "World"}, {"Goodbye", "Universe"}, {"What", "am", "I", "doing"}};
for(auto it = list.cbegin(), it != list.cend(), ++it) {//Проходимся по всем элементам списка
cout << (*it)[1] << '\n';
// (*it) даст элемент списка: vector<string>
// Пы можем обратиться к элементу вектора при помощи оператора []
}
struct base
{};
struct derived: base
{};
//...
derived* d = new derived;
//Работает, безопасно
base* b = static_cast<base*>(d);
//Работает, безопасно так как b на самом деле указывает на derived
d = static_cast<derived*>(b);
b = new base;
//Undefined Behavior. Программа превращается в тыкву.
d = static_cast<derived*>(b);
А system("pause") платформонезависимый?Нет
Ведь программа сразу же закрывается. Или како-то это по другому решается?Настройте IDE нормально, либо запускайте программы из командной строки, а не двойным щелчком. Это нормальное и правильное поведение для консольных программ.
Ссылка используется только в случае с std::bad_alloc или с классами тоже?Стандарт обработки исключений в С++: бросать по значению, ловить по ссылке.
То есть, такого типа указатели нужно всегда инициализировать? Если не char* ptr = new char[SIZE], то char* ptr = NULL и на другой строке ptr = new char[SIZE]?Если
char* ptr = new char[SIZE]
бросит исключение, то переменной ptr не существует и удалять нечего. Нужно всегда инициализировать переменную при объявлении. Чем — другой вопрос.struct Outer
{
struct Inner;
};
struct Outer::Inner
{
Outer _outer;
Inner() : _outer() { }
};