Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

int x = x; Что произойдёт?

#cpp


Что произойдёт в результате такой инструкции:

int x = x;


?
    


Ответы

Ответ 1



Если в данной области видимости уже определена переменная x, это не откомпилируется: int x = 0; int x = x; // <-- ошибка, повторная декларация переменной http://ideone.com/3VGhe0 Если в данной области видимости нет переменной x (например, она вовсе не определена, или определена во внешней области), то это откомпилируется, но программа будет иметь неопределённое поведение. Это означает, что вам даже не гарантировано, что в переменной будет какой-то мусор. Программа имеет право делать всё, что угодно: с точки зрения компилятора она бессмысленна. Никогда так не делайте: компилятор C++ считает вас достаточно взрослым и ответственным, и не проверяет, следуете ли вы правилам. Да, я не знаю, почему в таком случае компилятор не выдаёт ошибку. Другие языки доверяют программисту меньше и контролируют.

Ответ 2



Смотря в каком месте находится, эта строка. Есть три вида памяти, динамическая, статическая и куча. 1] Динамическая память: выделяется обычно new, malloc, alloc..итд выделяется память и там лежит мусор (остатки предыдущей работы) но в некоторые маллоки заполняют память 0, а так же new конструктор может заполнять память 2] статическая память (глоб перемен, static): Память выделяется компилятором и заполняется нулевым значением. Ее можно увидеть в бинарнике и изменить. 3] стек (int x внутри функции): память выделяется, но в ней мусор.

Ответ 3



Произойдет на практике ровно то же самое, что и при простом объявлении int x; Однако в теории это - undefined behaviour, так что все, что угодно... Этот вопрос упоминался у Саттера в "Сложных задачах", а именно в задаче 9.1, постскриптум 1. Есть еще один подобный код, но с операторомnew: T t; new(&t) T(t);

Комментариев нет:

Отправить комментарий