我的问题:假设我正在C++(或C)中定义一个函数。是否有类似于C++的auto或decltype的东西,可以在函数定义内部使用,以便声明一个具有从正在定义的函数的返回类型推断出的类型的本地变量?
示例: 在C和C ++中常见的编码模式是
对于简单的返回类型,这并不是什么大问题,但当返回类型比较复杂时(比如返回类型是一个具有许多模板参数的模板类),不必在函数内部重复定义该类型将会更好(也不容易出错)。
我还希望不必更改函数定义以实现此目的。因此,在上面的示例中,虽然可以将 SomeType 更改为宏,或者使 foo 成为模板函数, SomeType 成为模板参数,但我真正想知道的是是否可以从周围函数的返回类型推断出特定的类型。
也许答案是“不可能”,这是公平的,但我想知道这个问题的答案。
示例: 在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 成为模板参数,但我真正想知道的是是否可以从周围函数的返回类型推断出特定的类型。
也许答案是“不可能”,这是公平的,但我想知道这个问题的答案。
auto
并在函数内部使用实际类型。 - chrisdecltype(foo())
或者返回语句中的大括号初始化来避免返回类型名称的重复。在简单的lambda表达式(只有一个返回语句)中,返回类型也可以被推断出来(我知道的几乎所有C++11编译器都已放宽对带有多个返回语句的lambda表达式的要求)。 - dypdecltype
)。 - pqnet