【问题标题】:auto with ternary operator and nullptr带三元运算符和 nullptr 的 auto
【发布时间】: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*

标签: c++ c++11 conditional-operator auto


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 1970-01-01
    • 2016-02-12
    • 2023-02-03
    • 1970-01-01
    • 2020-04-14
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多