Как вы уже цитировали, Rule A5-1-1
говорит
Правило A5-1-1 (требуется, реализация, частично автоматизировано). Литеральные значения не должны использоваться отдельно от инициализации типа, в противном случае символ c имена должны использоваться вместо.
(источник)
Идея этого правила заключается в том, что вы не должны использовать magi c константы , т.е. не пишите что-то вроде
// 100 is a magic constant. It's not clear what the next line means without comments.
if (list.size() > 100) {
std::cout << "error!";
} else {
std::cout << "everything ok!";
}
, а пишите
static constexpr auto maximum_allowed_size = 100;
// The next line speaks for itself: "if list is bigger than allowed ..."
if (list.size() > maximum_allowed_size) {
std::cout << "error!";
} else {
std::cout << "everything ok!";
}
Эта дополнительная константа в большинстве случаев повышает читабельность. Поскольку nullptr
является литералом , и вы используете этот литерал nullptr
для чего-то другого, кроме "инициализации типа", ваш код нарушает это правило A5-1-1.
Я не Не знаю, намеренно ли autosar препятствует использованию литерала nullptr
, лично я не вижу причины, по которой это нужно делать. Возможно, это было отслежено (должно быть исключением).
Вы можете перефразировать ваш код, чтобы отключить проверку:
if (timing_info) // implicitly convert pointer to bool
, поскольку этот вариант, очевидно, делает проверку также несчастной, вот другой вариант:
if (!!timing_info) // convert pointer to bool using double negation
Вы также можете использовать приведение, но я бы этого не делал. Честно говоря, мне больше всего нравится оригинальный вариант (if (nullptr != timing_info)
).