在函数返回值中定义新类型

Posted

技术标签:

【中文标题】在函数返回值中定义新类型【英文标题】:Define a new type in a function return value 【发布时间】:2015-04-13 15:21:53 【问题描述】:

我惊讶地发现以下代码在 MSVC 下编译、运行并产生预期的输出:

#include <iostream>
using namespace std;

struct Foo
    int _x;
    Foo(int x): _x(x) 
  //Note: no semi-colon after class definition.
   //Makes this behave as a return type for the following function:

Foo_factory(int x)
return Foo(x);

int main (int argc, char* argv[])

    Foo foo = Foo_factory(42);
    cout << foo._x << endl;  //Prints "42"
    return 0;

看到 MinGW 无法编译并出现错误“新类型可能未在返回类型中定义”,我并不感到惊讶。这只是标准的另一个 Microsoft 例外,还是合法的 C++?

【问题讨论】:

相关:***.com/a/29591317/3093378 您可以禁用语言扩展并找出答案 ;) 这在 C99 (demo) 中是允许的,但在 C++14 中是不允许的。 【参考方案1】:

在 N3797 (C++14) 和 N3485 (C++11) 中,§8.3.5 [dcl.fct]/9 明确以:

类型不应在返回或参数类型中定义。

因此,您的代码无效,而 GCC 可以正确诊断它。

【讨论】:

以上是关于在函数返回值中定义新类型的主要内容,如果未能解决你的问题,请参考以下文章

Python 函数可以只返回两个值中的第二个吗?

返回值中的函数混淆,啥是明确的真假?

函数新特性内联函数const详解

将变量传递给函数\使用该变量返回一个新值\重复直到值达到 0

SymPy的dsolve的返回值中的r()函数是啥意思?

sql 2005 聚合函数