C ++可以在函数内部使用局部变量,该函数的类型是从函数返回类型自动推断出来的吗?

时间:2014-08-13 22:00:11

标签: c++ return decltype inferred-type

我的问题:说我在C ++(或C)中定义一个函数。是否有类似于C ++的 auto decltype ,我可以在函数定义中使用它来声明一个局部变量,其类型是从返回我定义的函数的类型?

实施例: 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 成为模板函数并且 SomeType 模板参数,我真的想看看我是否可以从周围函数的返回类型中特别推断出一种类型。

也许答案是&#34;不可能&#34;,这是公平的,但我想知道这种或那种方式。

1 个答案:

答案 0 :(得分:6)

在C ++ 11中:

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

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