Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
 Re: return str.c_str() не пашет  [new]
mayton
Member

Откуда: loopback
Сообщений: 46497
Я просто акцентирую внимание на том что есть тривиальные чеки (типизация и разыменование wild/null)
указателя которую тоже статик-анализатор анализирует но ее-же (эту-же проверку) делает
компиллятор (практически всегда) и пишет варнинги.

Просто мы эти варнинги игнорируем.

Вобщем - толкую о том что не надо с придыханием говорить о статик-анализе. Большая часть проблем
была видна гораздо раньше. Просто в нее не смотрели.
9 май 20, 13:40    [22129831]     Ответить | Цитировать Сообщить модератору
 Re: return str.c_str() не пашет  [new]
petrav
Member

Откуда:
Сообщений: 2105
Anatoly Moskovsky
mayton
В идеале компиллятор должен и выполнять эти функции.

Вообще-то не должен.
Задача компилятора генерировать код.

Спорное утверждение. Зачем тогда вообще компилятор выдаёт предупреждения, если можно просто генерировать бинарный код?

Anatoly Moskovsky
Функция анализа кода это задача IDE.

Не согласен. Задача IDE -- это текстовый редактор с поддержкой остальных инструментов: система сборки, взаимодействие с отладчиком, дополнительные аддоны.

Anatoly Moskovsky
Не говоря уже о том что очень много ложных срабатываний для работы с которыми нужна интерактивность. Т.е. компилятор тут никаким боком.

Какие ложные срабатывания? Тут задача тривиального анализа врапперов вокруг printf(). С ней справляется gcc, Студия тоже справляется но... через непотребство.
9 май 20, 14:15    [22129857]     Ответить | Цитировать Сообщить модератору
 Re: return str.c_str() не пашет  [new]
petrav
Member

Откуда:
Сообщений: 2105
Я немного перепутал топики. Прошу прощения.
9 май 20, 14:27    [22129865]     Ответить | Цитировать Сообщить модератору
 Re: return str.c_str() не пашет  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1341
mayton
Просто мы эти варнинги игнорируем.

всмысле игнорируем? Я если вижу красненькое, то сразу правлю. Это же лютое распиздяйство - красненькое игнорировать.
9 май 20, 20:14    [22129944]     Ответить | Цитировать Сообщить модератору
 Re: return str.c_str() не пашет  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1341
Anatoly Moskovsky
полудух,

Все компиляторы оптимизируют это устраняя копирование возвращаемого значения, и по факту функция работает с тем экземпляром куда результат присваивается в вызывающем коде (RVO).
А начиная с С++17 это обязательное поведение.

Так что можете спокойно возвращать строку.

а почему тут сработает?
class db_exception
{
  public:
    string msg;
    const char* m_stage;

    const char* what() const {
        return msg.c_str();
    }

    const char* stage() const {
        return m_stage;
    }
}
12 май 20, 09:52    [22130971]     Ответить | Цитировать Сообщить модератору
 Re: return str.c_str() не пашет  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50033

полудух
а почему тут сработает?

https://en.cppreference.com/w/cpp/language/lifetime

Posted via ActualForum NNTP Server 1.5

12 май 20, 12:24    [22131086]     Ответить | Цитировать Сообщить модератору
 Re: return str.c_str() не пашет  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1341
что-то многовато там фраз Undefined behavior... куда смотреть то?
объект всё ещё жив, но функция то внутри него оживает только в момент вызова и заканчивается по достижении }
а потом снова оживает новая ф-я в момент вызова
т.е. она не отличается от обычной ф-и в этом плане

Сообщение было отредактировано: 12 май 20, 21:03
12 май 20, 21:02    [22131559]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / C++ Ответить