Sun Studio 12.1 のタイトルから、次のスニペットで警告が表示されます。
#include <vector>
std::vector<int> g()
{
std::vector<int> result;
result.push_back(5);
return result;
}
int main()
{
int b = g()[0]; // <- Warning in this line
return b;
}
警告テキストは次のとおりです。
Warning: should not initialize a non-const reference with a temporary.
const 以外の参照を一時的に初期化するのは悪いことだとわかっていますが、ここでそれがどのように行われるのかわかりません。それ自体が一時的なベクトルの最初の要素への参照を返すことは知ってい[0]
ますが、問題が何であるかはわかりません。
誰か説明してくれませんか
- コンパイラに文句を言うのはなぜですか?
- それは正当な警告ですか?
- はいの場合、何を変更する必要がありますか?
- いいえの場合、どうすればエレガントに沈黙させることができますか?