Size: a a a

2020 August 26

D

Danya in supapro.cxx
Есть ещё варианты использовать статические и динамические анализаторы
Статические анализаторы ищут чепуху смотря на код, а динамические ищут во время работы программы
Статические это как варнинги в компиляторах, только могут быть подробнее, но из-за этого могут быть ложные срабатывания. Примеры: Clang Static Analyzer, Clang-Tidy, PVS Studio
Примеры динамических: Valgrind, AddressSanitizer, вроде есть ещё UBsan какой-то
источник

D

Danya in supapro.cxx
horse horssyyy
Тогда вопрос по сути. Скажите флаг Wall отлавливает все UB или всё-таки можно скомпилировать чепуху?
Можно ещё -Wextra
источник

D

Dmitriy in supapro.cxx
Danya
Есть ещё варианты использовать статические и динамические анализаторы
Статические анализаторы ищут чепуху смотря на код, а динамические ищут во время работы программы
Статические это как варнинги в компиляторах, только могут быть подробнее, но из-за этого могут быть ложные срабатывания. Примеры: Clang Static Analyzer, Clang-Tidy, PVS Studio
Примеры динамических: Valgrind, AddressSanitizer, вроде есть ещё UBsan какой-то
UB Sanitizer - коллега ASan'a))
источник

IZ

Ilia Zviagin in supapro.cxx
horse horssyyy
Тогда вопрос по сути. Скажите флаг Wall отлавливает все UB или всё-таки можно скомпилировать чепуху?
Нет, варнинги не отлавливают UB, UB по определению не требует диагностики как правило.
То есть по стандарту он не требует, по факту что-то как ошибка диагностируется, что то как предупреждение, а что-то вообще никак
источник

IZ

Ilia Zviagin in supapro.cxx
horse horssyyy
Ну к примеру использование неинизиализрованной переменной это вроде ж ub
Локальной только переменной отлавливает
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Я правильно понимаю, что нет никакой разницы между объявлениями:
const int func();
и
int func();
?
Или если int заменить на string.
Или где-то первый вариант может не пройти?
источник

АК

Александр Караев... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Я правильно понимаю, что нет никакой разницы между объявлениями:
const int func();
и
int func();
?
Или если int заменить на string.
Или где-то первый вариант может не пройти?
в случае с const std::string func() не получится сделать func().non_const_method()
источник

АК

Александр Караев... in supapro.cxx
интересно, что для std::string func() можно сделать func() = "123",
а для int func() нельзя сделать func() = 5
источник

IZ

Ilia Zviagin in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Я правильно понимаю, что нет никакой разницы между объявлениями:
const int func();
и
int func();
?
Или если int заменить на string.
Или где-то первый вариант может не пройти?
Разница есть.
Смысла делать так -нет
источник

IZ

Ilia Zviagin in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Я правильно понимаю, что нет никакой разницы между объявлениями:
const int func();
и
int func();
?
Или если int заменить на string.
Или где-то первый вариант может не пройти?
Потому что возврат функции - это temporary value, rvalue, почти const и так
источник

W

Wild_Wind in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Я правильно понимаю, что нет никакой разницы между объявлениями:
const int func();
и
int func();
?
Или если int заменить на string.
Или где-то первый вариант может не пройти?
Так делать не надо.
Точно не помню где, но что-то ломается с мув семантикой.
источник

АК

Александр Караев... in supapro.cxx
Wild_Wind
Так делать не надо.
Точно не помню где, но что-то ломается с мув семантикой.
ломается void f(T); const T g(); f(g()), видимо
источник

W

Wild_Wind in supapro.cxx
Александр Караев
ломается void f(T); const T g(); f(g()), видимо
И это тоже.
В общем, не вижу ни одной адекватоной причины возвращать костантную копию из функции.
источник

hh

horse horssyyy in supapro.cxx
Александр Караев
интересно, что для std::string func() можно сделать func() = "123",
а для int func() нельзя сделать func() = 5
Потому что в стринг есть клнструктор копирования наверное
источник

АК

Александр Караев... in supapro.cxx
horse horssyyy
Потому что в стринг есть клнструктор копирования наверное
у int'а неформально он тоже есть (int a, b; a = b;), но я думаю, что дело в другом.
у std::string он не помечен как const & по this, т.е. может быть вызван даже на rvalue (std::string{} = "123")

UPDATE: не, пометка const& не спасёт, нужно удалять operator= для && this
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Александр Караев
в случае с const std::string func() не получится сделать func().non_const_method()
Точно! :)
источник

Rh

Rock hero in supapro.cxx
Уважаемые как можно реализовать доступ к переменной из одной области видимости в другой области   без глобального объявления?
источник

АВ

Александр Водянников... in supapro.cxx
Например ?
источник

AN

Alexander N in supapro.cxx
Rock hero
Уважаемые как можно реализовать доступ к переменной из одной области видимости в другой области   без глобального объявления?
Передавать референс? Указатель?
источник

Rh

Rock hero in supapro.cxx
https://pastebin.com/gPjExUFe  что то вроде этого
источник