Я получаю предупреждение из заголовка 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.
Хотя я знаю, что инициализация неконстантной ссылки временной — это плохо, я не понимаю, как это происходит здесь. Я знаю, что [0]
возвращает ссылку на первый элемент вектора, который сам по себе является временным, но я не понимаю, в чем проблема.
Может кто-нибудь объяснить
- Почему компилятор жалуется?
- Is it a legitimate warning?
- If yes, what do I have to change?
- Если нет, как я могу элегантно заставить его замолчать?