авто с троичным оператором и nullptr

#c #c 11 #conditional-operator #auto

Вопрос:

Могу ли я использовать auto с таким использованием тернарный оператор?

 auto obj = some_cond ? static_cast<className*>(baseClassObj) : nullptr;
 

Он компилируется в Visual Studio, и код работает нормально, но могут ли быть какие-либо неожиданные побочные эффекты? Или auto здесь всегда будет className* , и я смогу расслабиться и написать такой код? Или с помощью тернарного оператора лучше написать это?

 className* obj = some_cond ? static_cast<className*>(baseClassObj) : nullptr;
 

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

1. Тип каждой переменной C определяется во время компиляции. Тип вашего auto obj есть className* .

Ответ №1:

auto выводит к типу значение, которое ему присвоено. Тернарный оператор может возвращать только один тип. nullptr неявно преобразуется в любой тип указателя, но ни один тип указателя не является неявно преобразуемым std::nullptr_t , поэтому в этом примере тернарный оператор всегда должен возвращаться className* и , следовательно auto , всегда будет выводить как className* .