c++ - C++ 可以在类型自动从函数返回类型推断出的函数中使用局部变量吗?

标签 c++ return decltype inferred-type

我的问题:假设我在 C++(或 C)中定义一个函数。是否有任何类似于 C++ 的 autodecltype 的东西,我可以在函数定义中使用它们来声明一个局部变量,该变量的类型是从我函数的返回类型推断出来的定义?

例子: 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 成为模板参数,我真的想看看一般情况下我是否可以从周围函数的返回类型中专门推断出一个类型。

也许答案是“不,这是不可能的”,这很公平,但我想知道其中一种方式。

最佳答案

在 C++11 中:

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

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

关于c++ - C++ 可以在类型自动从函数返回类型推断出的函数中使用局部变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25296924/

相关文章:

C++ 方法继承但返回类型错误(自动转换?typeid(*this)?)

c# - 在什么情况下这个函数不会返回值?为什么编译器会报错?

c++ - 无论如何在模板参数上有一个decltype?

c++ - 有没有办法以编程方式在 osx 上隐藏碳应用程序?

c++ - openCV imshow不在屏幕上渲染图像

c++ - 我的代码是在创建对象的深拷贝还是浅拷贝?

c++ - getObjByName() 应该返回什么?

c++ - 这个使用 decltype 和 declval 的 C++ typedef 应该如何编写以使其可移植?

c++ - 为什么此自定义类型特征无法编译

C++:在迭代器之间的计算距离上被类型混淆