Can C++;在其类型自动从函数返回类型推断的函数中使用局部变量? 我的问题是:我在C++中定义函数(或者在C中)。我可以在函数定义中使用类似于C++的auto或decltype的东西来声明一个局部变量,该变量的类型是从我定义的函数的返回类型推断出来的吗

Can C++;在其类型自动从函数返回类型推断的函数中使用局部变量? 我的问题是:我在C++中定义函数(或者在C中)。我可以在函数定义中使用类似于C++的auto或decltype的东西来声明一个局部变量,该变量的类型是从我定义的函数的返回类型推断出来的吗,c++,return,decltype,inferred-type,C++,Return,Decltype,Inferred Type,例如: C和C++中常用的编码模式是 SomeType foo() { SomeType x; // ... do something to x ... return x; } 我希望推断第二个SomeType,而不是显式地输入它。 下面的内容不起作用,但我希望我能本着这种精神做点什么 SomeType foo() { decltype(return) x; //<-- infer the function return type, which here is

例如: C和C++中常用的编码模式是

SomeType foo() {
   SomeType x;
   // ... do something to x ...
   return x;
}
我希望推断第二个SomeType,而不是显式地输入它。 下面的内容不起作用,但我希望我能本着这种精神做点什么

SomeType foo() {
   decltype(return) x;  //<-- infer the function return type, which here is SomeType
   // ... do something to x ...
   return x;
}
SomeType foo(){
C++11中的decltype(return)x;//:

SomeType foo()
{
    decltype(foo()) x;

表达式
foo()
foo的返回值的类型相同

您可以将返回类型设置为
auto
,并在函数内部使用实际类型。@chris这需要C++14或类似的东西,对吗?@pqnet,是的,我本来想这么说,但显然我没有。在C++11中,您可以使用
decltype(foo())
或return语句中的大括号初始化,以避免重复返回类型的名称。在简单的lambdas(=仅返回语句)中,也可以推断返回类型(我所知道的几乎所有C++11编译器都放宽了这一限制,使lambdas不只是返回语句)@pqnet在严格的C++11中,如果lambdas只包含一个返回语句,
[]{return 42;}
返回一个
int
[]{int x=42;return x;}
不应编译,则可以通过
auto
,而不是
decltype
)的规则来推断其返回类型(返回类型为
void
)。但在我所知道的编译器中,只有VS2010使用这些规则。有关详细信息,请参阅