C++ 中自动函数的自动 std::variant

问题描述 投票:0回答:1

对于此代码:

struct A {};
struct B {};

auto f() -> std::variant<A, B>
{
    if (true) return A();
    return B();
}

编译器是否可以自动将返回类型推导为

std::variant<A,B>
? 这样就可以省略返回类型声明:

auto f() // std::variant<A, B> deduced by compiler
{
    if (true) return A();
    return B();
}
c++ variant
1个回答
0
投票

不,这是不可能的。

仅当所有

return
语句返回相同类型时,自动返回类型推导才起作用,并且此处
A
B
不同。

以任何其他方式定义规则将非常困难(如果不是不可能的话)。

例如,在您的情况下,可能还有其他类型都可以由

A
B
构造,例如:

  1. std::variant<A, B, std::monostate>
    (或任何其他可以包含
    std::variant
    A
    或任何其他类型的
    B
    )。
  2. std::any
    .

还可能有一些具有构造函数的自定义类 - 一个接受

A
,一个接受
B

所有这些示例都说明了为什么期望编译器选择

variant<A, B>
有点太过分了。

© www.soinside.com 2019 - 2024. All rights reserved.