Я занимаюсь разработкой проекта с использованием C ++ 98. Так что у меня нет "nullptr". Конечно, я делаю статический анализ кода для исходного кода в моем проекте. От этого я получил много сообщений об использовании 0 в назначениях и сравнениях. Все сообщения относятся к «разным типам». Я начал добавлять суффиксы к 0, чтобы определить некоторые правильные типы. Но это возможно не для всех типов данных. И особенно не для указателей (да, необработанный указатель).
Я тогда придумал следующий шаблон:
template <typename T>
const T null(void)
{
return static_cast<T>(0);
}
С этим я больше не получаю предупреждений относительно смешивания типов. Я могу написать, например:
typedef unsigned char uchar;
. . .
uchar someVariable = null<uchar>();
SomeComplexClass *someComplexClass = null<SomeComplexClass *>();
. . .
if (null<SomeComplexClass *>() == someComplexClass)
{
. . .
}
Вы можете спросить, боже мой, что это за ерунда. Но, будучи экспертом по функциональной безопасности и работая в автомобильной промышленности, я получаю все больше и больше предостережений, даже в небольших домашних проектах для хобби, таких как описанные выше.
После прочтения Скотта Мейерса "Эффективно
Современный C ++ ", особенно" Пункт 1: Понимание типа шаблона. " в объектном коде просто 0. Но
- Синтаксис всегда будет в порядке?
- Для какого типа?
- А как насчет константности?
- Любое другое решение?
У меня даже есть сомнения по поводу "nullptr". Я думаю, что я становлюсь немного параноиком: -)