当使用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 ...
});
Run Code Online (Sandbox Code Playgroud)
据我所知,-Waggregate-return标志"警告,如果任何返回结构或联合的函数被定义或调用",因为,如果我理解正确,你可能会通过返回一个足够大的对象来溢出堆栈.
然而,for_each返回类型的拉姆达,其类型为void.为什么会触发警告?我错过了什么?我该如何改进我的代码?
为什么会触发警告?
据推测,该警告是通过返回类或联合类型的任何内容来触发的。Lambda 具有类类型,并for_each返回其函数参数,因此会触发警告。
begin(elements)和返回的迭代器类型也有可能end(elements)触发警告,具体取决于该Container类型如何实现迭代器。
我该如何改进我的代码?
我会禁用该警告;它与惯用的 C++ 并不真正兼容,因为从函数返回小类对象是很常见的。例如,它也可以由std::map::insert()返回一对的 和许多其他标准库函数触发。
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |