带有三元运算符和nullptr的auto
我可以使用auto三元运算符的这种用法吗?
auto obj = some_cond ? static_cast<className*>(baseClassObj) : nullptr;
它在 Visual Studio 中编译,代码运行正常,但会不会有任何意想不到的副作用?或者,会auto一直在这里className*,我可以放松并编写这样的代码吗?或者,使用三元运算符,这样写更好吗?
className* obj = some_cond ? static_cast<className*>(baseClassObj) : nullptr;
回答
auto推导出分配给它的值的类型。三元运算符只能返回一种类型。 nullptr可隐式转换为任何指针类型,但没有指针类型可隐式转换为std::nullptr_t,因此在此示例中,三元运算符必须始终返回className*,因此auto将始终推导出为className*。