Aidar
Tidy более жесткий
Aidar
Там вплоть до кодстайла чекается
Surreal
http://www.mariobadr.com/using-clang-tidy-with-cmake-36.html
Aidar
tidy еще исправлять умеет
Cuno
Это же разное...
Не вижу существенной разницы. noexcept - функция не бросает исключений, иначе std::terminate. -fno-exceptions - никакая функция в компилируемом коде не кидает исключений, иначе std::terminate.
Cuno
Спасибо, гуглить я умею. Несмотря на то, что там написано "the behavior is quite different when you use -fno-exceptions and when you mark the function as noexcept", я в упор не вижу разницы (разве что в одном случае код с throw скомпилируется, а в другом - нет, но разве это существенно?).
Cuno
Так где же разница в поведении? Даже если библиотека кинет исключение, то и в том, и в другом случае я получу std::terminate.
✙ Fatum ✙
ребят, кто знает, почему std::regex expr("[0-9]+"); бросается ексепшенами
✙ Fatum ✙
уже пробовала и "\\d+"
Anonymous
может проблема не в регулярке?
Anonymous
вроде с ней всё норм
✙ Fatum ✙
и "\\d" - одно и то же
✙ Fatum ✙
может проблема не в регулярке?
так именно на этой строке падает
✙ Fatum ✙
точнее, бросается ексепшеном
✙ Fatum ✙
✙ Fatum ✙
regex_error
Vladislav
может что-то память регэкспа попортило?
Anonymous
тогда валгриндом погулять?
Vladislav
если gcc/clang, я бы с включенным asan скомпилировал и позапускал
Square
regex_error
Пустое работает?
Square
Местами вверх/вниз с чем нить
Cuno
Проблема точно не в regex'e
Square
Барьеры расставить
Vladislav
да
точно memory corruption
✙ Fatum ✙
точно memory corruption
интересно, где это оно могло покораптиться, если я эту переменную только инициализирую на этой строке
Vladislav
мог испортиться сам строковый литерал, например)
✙ Fatum ✙
Evgenii
В обратном порядке, не? Валгринд больше ловит и дальше работает
✙ Fatum ✙
кстати, спасибо за совет с СЛион - дебажить стало намного удобнее
Evgenii
У меня наоборот
Cuno
мог испортиться сам строковый литерал, например)
Они же в read-only памяти по умолчанию. Упало бы раньше.
Evgenii
Вместе не вижу смысла, обычно компилирую с asan, если не работает, загоняю в valgrind
Vladislav
нет
Cuno
Есть UB при попытке их изменить (const жеж). Гарантии segfault'a, естественно, нет, но на практике компилятор всегда помещает их в .rodata сегмент, который мапится как read-only.
Cuno
UB не стоит понимать буквально, в большинстве случаев поведение на конкретной платформе с конкретным компилятором достаточно определенное.
Evgenii
Ну любое неопределенное поведение в итоге как-то определено
Cuno
Разработчики компиляторов адекватные люди.
Evgenii
Ну гарантий нет, но если стоит rand%42 уже 8 версий и никто код не трогает, то это вполне определенно)
Cuno
если
Cuno
Я говорю о том, что такой код: ''' int* x = nullptr; *x = 123; ''' скомпилированный череез g++\clang на x86(-64) под линуксом гарантированно дает segfault хоть это и UB. Ядерные ракеты такой код (внезапно!) не запустит.
Cuno
не те 'кавычки' -_-
🐙 Antony
Ещё хуже... Современные компиляторы оптимизируют основвываясь на UB. Если код с UB работает на gcc-6.2, то на gcc-6.3 могут добавить оптимизацию и код работать перестанет.
🐙 Antony
Да, я из него черпал инфу :)
Evgenii
Речь с самого начала шла о таких ограниченниях
Evgenii
UB не стоит понимать буквально, в большинстве случаев поведение на конкретной платформе с конкретным компилятором достаточно определенное.
🦥Alex Fails
Внезапно этот код работает если вы пишите под BIOS
Да в любом месте, где разрешена запись в нулевой адрес. Где-т тут на днях была статья про фишку ядра линя, связанную с тем, что где-то нуллптр был writable, а разрабы в некоторых местах писали в него с надеждой, что писать туда нельзя ( т.е., для падения ядра)
🦥Alex Fails
Хз, мб ща найду
Sokolov
#include <iostream> int main (){ std::cout << "Hello World!"; return 0; }
Sokolov
/tmp/ccea35T1.o: In function `main': learn.cpp:(.text+0xa): undefined reference to `std::cout' learn.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' /tmp/ccea35T1.o: In function `__static_initialization_and_destruction_0(int, int)': learn.cpp:(.text+0x3d): undefined reference to `std::ios_base::Init::Init()' learn.cpp:(.text+0x4c): undefined reference to `std::ios_base::Init::~Init()' collect2: error: ld returned 1 exit status
Sokolov
Вот почему, нльзя сесть спокойно ипо урокам делать??
Sokolov
Мне дали ссылку на уроки learncpp.com
Sokolov
Вот написал как там написано и вот что.
Sokolov
Подскажите плиз чо за фигня.
Алдар
это уже С++, там компилятор С?
Sokolov
Ну я делаю gcc file.cpp
Nikita
Sokolov
Sokolov
Извиняюсь за тупость.
Anonymous
Парни, есть какие-нибудь каналы в телеграме по C++?
Alexander
Уже вот тут
Alexander
Добро пожаловать
Anonymous
> каналы
Anonymous
🙈
Alexander
А, в глаза долблюсь, бывает )
🦥Alex Fails
также по новостям туда можно мне в лс писать
Alexander
А по Qt есть какие-нибудь живые чаты и каналы? Язык не важен, лишь бы поговорить можно было.
🦥Alex Fails
тут можно. и в супапро. отдельных чатов не видел, но можно создать, если будет народ
Sergey
да можно и сюда я думаю
Sergey
тут кутешников много, я один из них
Sergey
алсо вот, ребят. вспомнил. поставил сегодня на пробу resharper - плагин для V2013. прогнал его на одном проекте. и он выдал такое странное предупреждение. суть в следующем
Sergey
class C { public: C() { val |= some_bitmask; // warning - value may be unitialized } int val = 0; }
Sergey
ну примерно так
Sergey
мне казалось - если с C++11-style что-то инициализируется, то в теле конструктора оно уже присвоено, разве нет?