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......