Задание из экзамена:
class X
{
public:
X(int x){cout<<x-1;}
};
template <class T, int d=3>
class Container
{
T* _arr;
public:
Container():_arr(new T[d]){}
void setItemAtIndex(T item, int index){ _arr[index]=item;}
X getItemAtIndex(int index){ return _arr[index];}
};
int main(){
Container<int>container;
for (int i = 1; i < 4; ++i) {
container.setItemAtIndex(i,i);
X x = container.getItemAtIndex(i);
}
return 0;
}
Нужно написать скомпилится ли программа, если да то какой вывод. Вывод:012. Я не понимаю одного, когда мы создаем класс Контейнер по умолчанию рамез массива 3, когда идет цикл в мейне он идет начиная с 1, соответственно когда i=3 функция setItemAtIndex получает (3,3) и кладет 3 в место массиве 3, но разве если массив на 3 элемента последний элемент не должен быть под индексом 2?
Выход за пределы массива является Неопределенным Поведением. Соответственно отсутствует возможность предсказать, скомпилируется ли программа, и что именно будет результатом ее работы.
У массивов вида T* проверки на выход за пределы массива нет. За границей массива может лежать мусор, обращение и изменёние которого ни к чему плохому не приводит. При этом программа падать не будет.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Необходимо посадить событие с помощью атрибута onclick на тег <p>Объясните, пожалуйста, почему в данном случае функция не вызывается?
Мне нужно спарсить изображения определенного класса со страницы и разместить их в WinForms