带有三元运算符和 nullptr 的 auto

Bru*_*ice 3 c++ conditional-operator auto c++11

我可以使用auto三元运算符的这种用法吗?

auto obj = some_cond ? static_cast<className*>(baseClassObj) : nullptr;
Run Code Online (Sandbox Code Playgroud)

它在 Visual Studio 中编译,代码运行正常,但会不会有任何意想不到的副作用?或者,会auto一直在这里className*,我可以放松并编写这样的代码吗?或者,使用三元运算符,这样写更好吗?

className* obj = some_cond ? static_cast<className*>(baseClassObj) : nullptr;
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 6

auto推导出分配给它的值的类型。三元运算符只能返回一种类型。 nullptr可隐式转换为任何指针类型,但没有指针类型可隐式转换为std::nullptr_t,因此在此示例中,三元运算符必须始终返回className*,因此auto将始终推导出为className*