当尝试使用 gcc 和以下示例时-Waggregate-return
标记警告:function call has aggregate value
触发器:
struct Element {
// ... stuff ...
}
Container<Element> elements(10);
for_each(begin(elements),end(elements),[](Element& e){
// ... modify elements ...
});
据我所知,-Waggregate-return
标志“如果定义或调用任何返回结构或联合的函数,则发出警告”,因为,如果我理解正确,您可能会通过返回足够大的对象来溢出堆栈。
然而,for_each
返回 lambda 的 类型,其类型为void
。为什么会触发警告?我错过了什么?我该如何改进我的代码?
为什么会触发警告?
据推测,该警告是通过返回类或联合类型的任何内容来触发的。 Lambda 具有类类型,并且for_each
返回其函数参数,这样就会触发警告。
也有可能返回的迭代器类型begin(elements)
and end(elements)
可能会触发警告,具体取决于Container
类型实现迭代器。
我该如何改进我的代码?
我会禁用该警告;它与惯用的 C++ 并不真正兼容,因为从函数返回小类对象是很常见的。它也可能被触发,例如,std::map::insert()
,它返回一对,以及许多其他标准库函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)