当尝试使用 gcc 和 -Waggregate-return
标记警告的以下示例时:function call has aggregate value
triggers:
struct Element {
// ... stuff ...
}
Container<Element> elements(10);
for_each(begin(elements),end(elements),[](Element& e){
// ... modify elements ...
});
据我所知,-Waggregate-return
标记“如果定义或调用任何返回结构或 union 的函数时发出警告”,因为如果我理解正确的话,您可能通过返回足够大的对象来溢出堆栈。
但是,for_each
返回 lambda 的类型,其类型为 void
。为什么会触发警告?我错过了什么?我怎样才能改进我的代码?
最佳答案
Why does it trigger the warning?
据推测,警告是通过返回类或 union 类型的任何内容触发的。 Lambda 具有类类型,for_each
返回其函数参数,因此会触发警告。
begin(elements)
和 end(elements)
返回的迭代器类型也有可能触发警告,具体取决于 Container
类型实现迭代器。
How can I improve my code?
我会禁用该警告;它与惯用的 C++ 并不真正兼容,因为从函数返回小类对象是很常见的。它也会被触发,例如,返回一对的 std::map::insert()
和许多其他标准库函数。
关于c++ - 为什么 for_each + lambda 会触发 -Waggregate-return 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11473099/