Вообще говоря, объективно веских причин для этого нет. Для указателей это на самом деле отрицательно полезно. Преобразование указателя в bool
является четко определенной операцией в C ++ и было со времен C (и, вероятно, раньше). Это базовая идиома, которую каждый учитель C ++ должен выучить . Явное выполнение преобразования отправляет сообщение о том, что явное преобразование каким-то образом отличается от неявного контекстного преобразования, которым оно не является.
Кроме того, пользователь, который не знает, что делает if(ptr)
, вероятно, также не делает этого. знать, что вообще сделает преобразование указателя на bool
. Так что if(static_cast<bool>(ptr))
нельзя даже отстаивать как более ясное;if(ptr != nullptr)
гораздо яснее о том, что происходит с неофитом.