Страницы

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

воскресенье, 26 января 2020 г.

Пустое значение переменной

#cpp


Как определить, пуста ли переменная, к примеру, типа int?
    


Ответы

Ответ 1



Переменные встроенных типов (int, double и т. д.) не могут быть пустыми в принципе, даже если вы их не инициализировали. В любом случае переменная будет иметь какое-либо значение. При объявлении переменной (например, int a;) ей выделяется память, если переменную не инициализировать, то значение переменной будет равно тому мусору, который был в памяти до этого. Поэтому пуста ли переменная спрашивать некорректно, и так же считается хорошим правилом всегда инициализировать переменные значением при объявлении.

Ответ 2



Используйте optional (например Boost.Optional), тогда у переменной будет специальное пустое значение.

Ответ 3



Никак. Переменная целого типа может быть неинициализирована, и попытка чтения из неё есть ошибка согласно стандарту (так называемое «неопределённое поведение»). После этой ошибки ничего более не гарантировано. Так что вы не можете просто «проверить значение». Логика «ну какое-то значение ведь там будет, раз память выделена» неверна, стандарт этого не гарантирует. Наоборот, после такой проверки все остальные гарантии отменяются. Вы не можете проверить переменную локально. Вы должны сами убедиться в том, что все переменные правильно инициализированы. Компилятор C++ ничего не сделает за вас, он считает вас очень взрослым и очень ответственным. (В отличие от других языков, которые контролируют вас более плотно.)

Ответ 4



Нельзя никак определить инициализирована ли переменная фундаментального типа или нет. Т.к. отсутствие инициализации подразумевает (в частном случае) наличие любого случайного (мусорного) значения. При этом компилятор в отладочном режиме всё же может писать в такие переменные какое-то определенное значение (в том числе и ноль), по которому можно косвенно понять, что переменная не была инициализирована. Косвенно, потому, что вполне возможно инициализировать переменную явно точно таким же значением. Дополнительно, при отсутствии инициализации, компилятор также может сообщить об этом соответствующим предупреждением, если попытаться использовать значение неинициализированной переменной.

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

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