【发布时间】:2023-01-28 19:56:39
【问题描述】:
C++ 中有一个很好的特性,您可以说该函数的返回类型为“auto”,编译器会计算出来。但是,如果我在出错时返回一个指针和 nullptr 怎么办?不知何故,编译器无法推断出正确的类型并给出错误。
在下面的简单示例中,假设 std::vector<int> 计划在未来完全被其他东西取代,以证明这里使用 auto 是合理的:
#include<vector>
std::vector<int> e;
auto test(){
if(!e.empty())
return &e[0];
return nullptr;
}
在 c++17 中,我收到以上错误消息。
所以我尝试用
return reinterpret_cast<decltype(&e[0])>(nullptr)
并得到错误invalid cast。我看到的唯一解决方案是用 3 行替换返回值:
auto out=&e[0];
out=nullptr;
return out;
我可能可以通过将 auto 替换为某种 decltype 来将其减少到 2 行,但我想其他类型的转换可以在一行中完成我想要的吗?
或者我需要为这种情况使用更新版本的 c++ 标准吗?
我还尝试了 std::make_optional 并遇到了同样的问题,nullopt_t 的类型与 std::optional 不同。
我真正喜欢的是,如果编译器无论如何都会自动将类型推断为std::optional...
【问题讨论】:
-
提示:
nullptr的类型是nullptr_t -
deduce type to be std::optional?如果你想要 std::optional 那是完全地不同于int *。
标签: c++ auto reinterpret-cast nullptr stdoptional