为什么不能在 C++11 或更高版本的函数声明中定义结构?
Why can structs not be defined in a function declaration in C++11 or higher?
我想要实现的主要是 return 从 C++11 中的函数中获取一个未命名的结构。在 C++14 中,我可以通过定义内联函数并将 auto
作为 return 类型来实现,如下所示:
auto func()
{
struct
{
int member;
} ret;
// set ret.member
return ret;
}
但是,C++11 不支持推导普通(非 lambda)函数的 return 类型,这仅在定义内联完成时在 C++14 中有效。
我尝试了以下两种在函数声明中声明结构的变体:
auto func() -> struct { int member; };
struct { int member; } func();
C++11 根本不可能做到这一点吗?如果是这样,有人知道这是否是故意不允许的,或者只是没有人想到这种自动推导类型的新用途(因为这只适用于将函数 return 值分配给 auto
变量)?
最后,还有其他方法可以实现类似的效果吗?我知道 std::tuple
,但我想命名这些值;在我的用例中,结构类型绝对仅用作此函数的 return 类型,那么为什么要命名它?
A class-specifier 由 class-head-name 和 { }
.一旦遇到右大括号,就定义了 class。如果省略 class-head-name,则 class 未命名(§9)。 type-specifier 可以有一个 class-specifier,但是 trailing-type-specifier 不能(仅 简单类型说明符、详细类型说明符、类型名称说明符 和 cv-qualifier 是允许的,§7.1.6)。出于这个原因,我认为不可能将 class 的定义放在 trailing-return-type 中。
来源:N4140
[dcl.fct]/p11:
Types shall not be defined in return or parameter types.
据我所知,这在 C++11 中并不新鲜。
我想要实现的主要是 return 从 C++11 中的函数中获取一个未命名的结构。在 C++14 中,我可以通过定义内联函数并将 auto
作为 return 类型来实现,如下所示:
auto func()
{
struct
{
int member;
} ret;
// set ret.member
return ret;
}
但是,C++11 不支持推导普通(非 lambda)函数的 return 类型,这仅在定义内联完成时在 C++14 中有效。
我尝试了以下两种在函数声明中声明结构的变体:
auto func() -> struct { int member; };
struct { int member; } func();
C++11 根本不可能做到这一点吗?如果是这样,有人知道这是否是故意不允许的,或者只是没有人想到这种自动推导类型的新用途(因为这只适用于将函数 return 值分配给 auto
变量)?
最后,还有其他方法可以实现类似的效果吗?我知道 std::tuple
,但我想命名这些值;在我的用例中,结构类型绝对仅用作此函数的 return 类型,那么为什么要命名它?
A class-specifier 由 class-head-name 和 { }
.一旦遇到右大括号,就定义了 class。如果省略 class-head-name,则 class 未命名(§9)。 type-specifier 可以有一个 class-specifier,但是 trailing-type-specifier 不能(仅 简单类型说明符、详细类型说明符、类型名称说明符 和 cv-qualifier 是允许的,§7.1.6)。出于这个原因,我认为不可能将 class 的定义放在 trailing-return-type 中。
来源:N4140
[dcl.fct]/p11:
Types shall not be defined in return or parameter types.
据我所知,这在 C++11 中并不新鲜。