带三元运算符和 nullptr 的 auto
Posted
技术标签:
【中文标题】带三元运算符和 nullptr 的 auto【英文标题】:auto with ternary operator and nullptr 【发布时间】:2021-09-19 07:08:40 【问题描述】:我可以在三元运算符的这种用法中使用auto
吗?
auto obj = some_cond ? static_cast<className*>(baseClassObj) : nullptr;
在 Visual Studio 中编译,代码运行正常,但会不会有什么意想不到的副作用?或者,这里的auto
会一直是className*
,我可以放松一下,写出这样的代码吗?或者,使用三元运算符,这样写更好吗?
className* obj = some_cond ? static_cast<className*>(baseClassObj) : nullptr;
【问题讨论】:
每个 C++ 变量的类型都是在编译时确定的。你的auto obj
的类型是className*
。
【参考方案1】:
auto
推导出分配给它的值的类型。三元运算符只能返回一种类型。 nullptr
可隐式转换为任何指针类型,但没有指针类型可隐式转换为 std::nullptr_t
,因此在此示例中,三元运算符必须始终返回 className*
,因此 auto
将始终推导出为 className*
。
【讨论】:
以上是关于带三元运算符和 nullptr 的 auto的主要内容,如果未能解决你的问题,请参考以下文章