предупреждение: возврат ссылки на временный файл

Необходимо предоставить полный путь файлу:

git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8:full/repo/path/to/my_file.txt
24
задан jackhab 27 August 2009 в 08:17
поделиться

4 ответа

Это пример, когда происходит нежелательное неявное преобразование. "" не является std :: string , поэтому компилятор пытается найти способ превратить его в единицу. И с помощью конструктора string (const char * str) эта попытка преуспевает. Теперь создан временный экземпляр std :: string , который будет удален в конце вызова метода. Таким образом, очевидно, не стоит ссылаться на экземпляр, который больше не будет существовать после вызова метода.

Я бы посоветовал вам либо изменить тип возвращаемого значения на const string , либо сохранить "" в члене или статической переменной SomeClass .

]
48
ответ дан 28 November 2019 в 22:41
поделиться

Это пример попытки оптимизации кода на C ++. Я сделал это, все сделали это ... Стоит отметить, что это классический пример, который может возвращать оптимизацию значений.

Как и сказал ttvd, правильный ответ - вернуть const std :: string, а не ссылку на него, и позволить компилятору оптимизировать его.

1225] Если вы доверяете интерпретатору вашего любимого языка в оптимизации позади вас, вам также не следует слишком умничать с C ++.

6
ответ дан 28 November 2019 в 22:41
поделиться

Проблема в первой строке. "" будет преобразовано в std :: string , поскольку у него есть допустимый конструктор, который принимает char * . Этот std :: string будет анонимным объектом, который является временным, и вы вернете его ссылку.

5
ответ дан 28 November 2019 в 22:41
поделиться

Как сказал Шегги Лягушонок, он преобразует "" во временный объект std :: string и, поскольку сигнатура вашего метода - std :: string, он пытается вернуть ссылку на него, следовательно, вы получаете предупреждение. Одним из обходных путей может быть возврат std :: string по значению (const std :: string SomeClass :: Foo (..)).

4
ответ дан 28 November 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: