#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*
.