小编use*_*927的帖子

C++ 编译器提示“自动返回类型推导不一致”

C++ 中有一个很好的功能,您可以说该函数的返回类型为“auto”,编译器会计算出它。但是,如果我在错误时返回指针和 nullptr 该怎么办?不知何故,编译器无法推断出正确的类型并给出错误。

在下面的简单示例中,imaginestd::vector<int>计划在将来完全被其他东西取代,以证明此处使用 auto 的合理性:

#include<vector>
std::vector<int> e;
auto test(){
  if(!e.empty())
    return &e[0];
  return nullptr;
}
Run Code Online (Sandbox Code Playgroud)

在 c++17 中,我收到上述错误消息。

所以我尝试将最后一次返回替换为

return reinterpret_cast<decltype(&e[0])>(nullptr)

并得到错误invalid cast。我看到的唯一解决方案是将返回值替换为 3 行:

auto out=&e[0];
out=nullptr;
return out;
Run Code Online (Sandbox Code Playgroud)

我可能可以通过替换auto为某种 来将其减少到 2 行decltype,但我想其他类型的转换可以在一行中完成我想要的事情?或者我是否需要针对这种情况使用更新版本的 C++ 标准?

我还尝试了 std::make_Optional 并遇到了同样的问题,因为 nullopt_t 的类型与 std::Optional 不同。我真正喜欢的是,如果编译器能够自动推断类型无论如何std::optional......

c++ nullptr reinterpret-cast auto stdoptional

2
推荐指数
1
解决办法
438
查看次数

标签 统计

auto ×1

c++ ×1

nullptr ×1

reinterpret-cast ×1

stdoptional ×1