Can C++;在其类型自动从函数返回类型推断的函数中使用局部变量? 我的问题是:我在C++中定义函数(或者在C中)。我可以在函数定义中使用类似于C++的auto或decltype的东西来声明一个局部变量,该变量的类型是从我定义的函数的返回类型推断出来的吗
例如: C和C++中常用的编码模式是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
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使用这些规则。有关详细信息,请参阅