5

gcc と-Waggregate-returnフラグ warning:で次の例を試すと、次のように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返します。なぜ警告がトリガーされるのですか? 私は何を逃したのですか?コードを改善するにはどうすればよいですか?void

4

1 に答える 1

5

なぜ警告がトリガーされるのですか?

おそらく、警告は、クラスまたはユニオン型の何かを返すことによってトリガーされます。ラムダにはクラス型があり、for_eachその関数引数を返すため、警告がトリガーされます。

また、型がイテレータを実装する方法によっては、 begin(elements)andによって返されるイテレータ型end(elements)が警告をトリガーする可能性もあります。Container

コードを改善するにはどうすればよいですか?

その警告を無効にします。関数から小さなクラス オブジェクトを返すことは非常に一般的であるため、慣用的な C++ とは実際には互換性がありません。また、たとえば、std::map::insert()ペアを返す やその他の多くの標準ライブラリ関数によってもトリガーされます。

于 2012-07-13T15:39:46.940 に答える