为什么GCC会说“不再支持命名的返回值”?

我不小心在return语句之后放置了我的函数定义的大括号

int id(int k) return k; { } 

但GCC回答了一个奇怪的错误消息

错误:不再支持命名的返回值

任何人都可以请解释一下这个奇怪的function可能是什么? 我从来没有听说过。

请参阅此处 – 通过在函数头中显式定义指定的返回值来实现早期的NRVO实现。

没有这个扩展的本地支持NRVO被添加在这里 – GCC 3.1发布系列。

上下文的简短剪切和粘贴:

G ++现在支持“命名返回值优化”:代码如

 A f () { A a; ... return a; } 

G ++会在返回值槽中分配一个,这样返回就成为一个空操作。 为此,函数中的所有返回语句必须返回相同的variables。

看到这里

他们被删除在gcc3.4

这是一个GCC扩展 , 在GCC 3.4中删除 。