C ++: как работать со значениями NULL (например, из базы данных)? - PullRequest
2 голосов
/ 05 ноября 2010

В C ++, как обращаться со значениями NULL в контексте, где мы можем ожидать строку или целое число?

Как правило, контекст будет при извлечении данных из базы данных, например, с LEFT JOIN, где некоторые несуществующие значения в некотором столбце будут представлены значением NuLL вместо ожидаемой строки или целого числа.

Сильное приведение в C ++ делает этот тип сценария намного сложнее, чем с PHP.

В PHP мы легко можем использовать переключатель if / else с помощью оператора ===:

if ($value === NULL) {
  // No data.
} else {
  // We have some valid data.
}

Как будет выглядеть эквивалент в C ++?

Я искал и не смог найти релевантный для C ++ вопрос.

Вопрос в целом действителен. В моем конкретном случае я использую библиотеку SQL dbixx .

Ответы [ 4 ]

4 голосов
/ 05 ноября 2010

boost::optional - это естественный способ представления, возможно, типов в c ++ с строгой проверкой типов (типы, которые могут быть нулевыми, должны проверяться на нулевые)

3 голосов
/ 05 ноября 2010

С http://art -blog.no-ip.info / wikipp / en / page / ref_dbixx_row :

Функция cols() возвращает количество столбцов в строке,isnull() возвращает, если конкретное поле равно нулю, используя номер столбца (начиная с 1) или имя столбца;

bool operator[] - это просто синтаксический сахар для isnull().

В своем вопросе вы указали, что используете dbixx, поэтому я дал ссылку на их документацию.Это всегда будет зависеть от используемой вами библиотеки.

1 голос
/ 05 ноября 2010

Это может звучать как общая концепция, но нет общего ответа для C ++. Сам язык не имеет действительно общего значения «NULL», которое можно использовать со всеми типами, чтобы отличать его от фактического значения.

Таким образом, ответ в любой ситуации полностью зависит от библиотеки или от того, с чем вы работаете, и от того, как она была разработана для указания значений «NULL». Возвращаемые значения функций, используемых для доступа к данным, могут, возможно, указывать, являются ли данные NULL или иным образом. Или может быть что-то вроде отдельной функции IsNull (). Или библиотека может использовать другую схему. Есть много возможностей.

Единственный возможный общий ответ: прочитайте документацию библиотеки, чтобы узнать, как они конкретно с ней справляются.

1 голос
/ 05 ноября 2010

Для строковых указателей (и указателей на объекты в целом) легко, они могут содержать 0, чтобы показать, что они нулевые.

Для целых чисел вы должны полагаться на внешнюю переменную, которая сообщает, является ли возвращаемый объект нулевым или нет.Или, если вы передадите его как указатель, вы можете использовать указатель 0, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...