У Intel есть сайт, посвященный именно этой проблеме, и именно эта проблема здесь .Это с 2008 года, но, кажется, применимо к вашей проблеме. Предупреждение существует, так как этот стиль программирования может привести к скрытым временным объектам и в некоторых случаях может игнорироваться .
В этом примере они указывают:
void foo(const int &var)
{
}
void foobar()
{
std::vector<std::string> numlist
// 383 remark here: a tempory object with "123" is created
numlist.push_back("123");
foo(10); // gives 383
}
следующее:
Разрешение:
- Обеспечить надлежащий объект для инициализации ссылки.
- Может безопасно игнорировать это предупреждение для функции обратного хода вектора.Вектор копирует аргумент в свое собственное хранилище;он никогда не хранит исходный аргумент.Поэтому использование временного кода совершенно безопасно.
Таким образом, вы можете игнорировать предупреждение, даже если это противоречит общему правилу , никогда не игнорировать предупреждения .
По моему мнению, Intel выбрала неверный путь, так как предупреждения, возникающие из-за неправильной диагностики, мешают развитию.