
Constantine
11.05.2018
12:13:41

Spoonson
11.05.2018
12:15:11
в std добавлять что-то UB

Anatoly
11.05.2018
12:19:19

Google

Constantine
11.05.2018
12:29:01

Antony
11.05.2018
12:35:07
Немного инфы про внутренности компиляторов: GCC с недавнего времени научился оптимизироваться constepxr функции намного лучше чем остальные:
Так GCC-6 превращает всё вычисление функции в константу https://godbolt.org/g/1ezAA2

Suren
11.05.2018
12:37:35
Привет. Такой вопрос от новичка по C++ (точнее даже по ардуине, которая на цпп)
есть ли разница объявлять static переменную внутри функции, либо в начале программы глобально?
не влияет ли на производительность то, что функция, которая вызывается тысячу раз в секунду имеет первой же строчкой объявление переменной? ну так как статик, то она не будет создаваться заново, но внутри на низком уровне там работают какие-то проверки типа (если ещё не существует, создать, а если уже существует, пропустить).
вопрос, собственно, в том, как сделать более производительно? объявлять заранее глобально?

Ruslan
11.05.2018
12:39:21
Ребят, приветики
имеется такая дичь
int x, y;
x = 1, 2, 3, 4, 5;
y = (1, 2, 3, 4, 5);
cout « x « y;
отсюда вывод, что x = 1, а y = 5
что это вообще за способ инициализации такой
чертов сололерн


Antony
11.05.2018
12:39:40
Привет. Такой вопрос от новичка по C++ (точнее даже по ардуине, которая на цпп)
есть ли разница объявлять static переменную внутри функции, либо в начале программы глобально?
не влияет ли на производительность то, что функция, которая вызывается тысячу раз в секунду имеет первой же строчкой объявление переменной? ну так как статик, то она не будет создаваться заново, но внутри на низком уровне там работают какие-то проверки типа (если ещё не существует, создать, а если уже существует, пропустить).
вопрос, собственно, в том, как сделать более производительно? объявлять заранее глобально?
на производительность влияет - будет проверка на каждый вхо в функцию
производительнее constexpr (если возможно сделать переменную константонй), либо сделать класс, где будет храниться эта переменная и функция, работающая с ней

Suren
11.05.2018
12:40:21

Anatoly
11.05.2018
12:40:37
Ребят, приветики
имеется такая дичь
int x, y;
x = 1, 2, 3, 4, 5;
y = (1, 2, 3, 4, 5);
cout « x « y;
отсюда вывод, что x = 1, а y = 5
что это вообще за способ инициализации такой
открой для себя оператор запятая

Alexander
11.05.2018
12:45:51
компилятор же имеет инфу о том, какая функция может быть constexpr, а какая не может

Antony
11.05.2018
12:47:32
но там все не так просто

Google

Antony
11.05.2018
12:48:12
constexpr выполняет фронтенд, информация о том что параметры константные пришли в оновном на бэкенде

Alexander
11.05.2018
12:48:12
что там не так?
а как там шланг?

Antony
11.05.2018
12:48:38
шлагн совсем тупит

Alexander
11.05.2018
12:48:40
у них с этим лучше или нет? потому что блин, бесят уже

Antony
11.05.2018
12:48:46
он даже с constexpr не оптимизирует
https://bugs.llvm.org//show_bug.cgi?id=37415

Alexander
11.05.2018
12:50:19
вот кусок говна

Vyacheslav
11.05.2018
12:51:16
http://shtonda.blogspot.com/2017/09/cpp-templates-complete-guide-2nd.html

Ilia
11.05.2018
12:52:15
Привет. Такой вопрос от новичка по C++ (точнее даже по ардуине, которая на цпп)
есть ли разница объявлять static переменную внутри функции, либо в начале программы глобально?
не влияет ли на производительность то, что функция, которая вызывается тысячу раз в секунду имеет первой же строчкой объявление переменной? ну так как статик, то она не будет создаваться заново, но внутри на низком уровне там работают какие-то проверки типа (если ещё не существует, создать, а если уже существует, пропустить).
вопрос, собственно, в том, как сделать более производительно? объявлять заранее глобально?
Разница есть семантическая, поэтому производительности ни при чем

Suren
11.05.2018
12:52:36

Alexander
11.05.2018
12:52:45
блин, какие же компиляторы беспомощные

Ilia
11.05.2018
12:53:21
Если тебе нужно просто глобальная переменная, то не используй переменную в функции

Suren
11.05.2018
12:55:47

Ilia
11.05.2018
12:55:56
Будет
Я не говорил, что не будет. Я говорил, что это не так важно

Antony
11.05.2018
13:25:48
блин, какие же компиляторы беспомощные
Зато откопался замечательный пример для троленья С разработчиков:
- Ваш С++ на 0.1% медленнее С
- А помоему с точность до наоборот. И пруфы есть: https://godbolt.org/g/JZrhYg

Google

Kirill
11.05.2018
13:46:38

Matwey
11.05.2018
13:47:18

Antony
11.05.2018
13:49:35

Kirill
11.05.2018
13:51:14

Vyacheslav
11.05.2018
13:52:15

Kirill
11.05.2018
13:54:04
там по ссылке две разные версии GCC, стара версия же не соптимизировала
тут напрягает отсутствие гарантий.
я делал констекспр конструкторы классов и все инстансы которые хотелось вычеслить в компайл тайме делал constexpr. в итоге компилятор говорил где конкретно ошибка, что вот этот тип не литеральный братиш, или вот тут у тебя параметр не констекспр. в конкретном случае с функциями, такое не прокатит т.к. хочешь в рантайме выполняй, хочешь в компайл тайме

Antony
11.05.2018
13:55:04
да, меня тоже напрягает

Kirill
11.05.2018
13:57:36
я в личку отписался :)

Ⱪonstantin
11.05.2018
14:06:50
A до 6го поддержки C++17 не было

Alexander
11.05.2018
14:10:03

Ⱪonstantin
11.05.2018
14:18:52

Alexander
11.05.2018
14:24:02
http://en.cppreference.com/w/cpp/language/constexpr

Ⱪonstantin
11.05.2018
14:27:44

Alexander
11.05.2018
14:28:06

Vladislav
11.05.2018
18:30:23
http://cppquiz.org/quiz/question/206

Andrey
11.05.2018
18:35:40
Эквивалент е в инте?
Всмысле выдаст

Google

Vladislav
11.05.2018
18:36:09
Нет) я тоже на это попался

Andrey
11.05.2018
18:36:59
Хмммммм

Gleb
11.05.2018
18:38:20
Да там опять нулевой элемент массива переставлен

Admin
ERROR: S client not available

Scarf
11.05.2018
18:39:56

Vladislav
11.05.2018
18:40:15

Andrey
11.05.2018
18:40:42
Correct!
We have several pieces of the puzzle, so let's peel away the layers.
The grammar for sizeof is in [expr.unary]§5.3¶1:
unary-expression:
...
sizeof unary-expression
sizeof ( type-id )
sizeof ... ( identifier )
...
We have three cases and the one that applies here is sizeof unary-expression. The unary expression is (0)["abcdefghij"], which looks odd but is just array indexing of string literal which is a const char array.
We can see that (0)["abcdefghij"] is identical to ("abcdefghij")[0] from [expr.sub]§5.2.1¶1which says:
... The expression E1[E2] is identical (by definition) to *((E1)+(E2)) ...
So we end up with 0th element of "abcdefghij", which is a, which is a char. And the result of sizeof('a') will be 1 since [expr.sizeof]¶1 says:
... sizeof(char), sizeof(signed char)and sizeof(unsigned char) are 1 ...


Matwey
11.05.2018
19:48:13
Господа, у меня к вам пятнечно вечерний вопрос. Есть A унаследованный от Base. И тут я хочу копирующее присваивание A реализовать, и тут мне начинает казаться, что это удобнее всего сделать дернув: static_cast<Base&>(*this) = static_cast<Base&>(other);
и доделав специфичные для A вещи.
Это ведь очень странная идея и надо завязывать?

Igor
11.05.2018
19:53:48

Matwey
11.05.2018
19:54:42
О, спасибо

Alex
11.05.2018
21:31:06
https://ideone.com/qxgQl0 подскажите плиз почему не ловится исключение

Azoyan
11.05.2018
21:34:24
https://ideone.com/S5lRuz исправил тебе

Alex
11.05.2018
21:34:40
А, блин, сяп)

Azoyan
11.05.2018
21:35:02
Только память почистить

Alex
11.05.2018
21:35:22
Воистину работает \o/

Azoyan
11.05.2018
21:36:24
https://ideone.com/kAmzQf но лучше так. И с такими вопросами в супапро)

Alex
11.05.2018
21:38:53
Да не-не, я шарю-шарю
Просто 5 утра даёт о себе знать (да и стараюсь особо catch'ами не пользоваться)

Egor
11.05.2018
22:18:53
catch2 для тестов кто использует? почему может быть:
msvc\14.14.26428\include\filesystem(3446): note: could be 'std::filesystem::recursive_directory_iterator std::filesystem::begin(std::filesystem::recursive_directory_iterator) noexcept' [found using argument-dependent lookup]
1>msvc\14.14.26428\include\filesystem(3188): note: or 'std::filesystem::directory_iterator std::filesystem::begin(std::filesystem::directory_iterator) noexcept' [found using argument-dependent lookup]
https://github.com/catchorg/Catch2/issues/1286

Timur
11.05.2018
22:46:11

olologin
11.05.2018
22:57:25

Google

olologin
11.05.2018
22:58:21
А, ну exe/dll который вызывает функции моей длл-ки мне конечно же никто не даст, потому как это часть кода заказчика

Timur
11.05.2018
22:59:46
ну, если это x64 то ABI гарантирует раскрутку стека (даже и без pdb), т.ч. стек то раскрутится, имен не будет/ Но под вами всё отладить удастся, т.к. будут свои и системные символы
не очень рабочий вариант, но жить можно.

olologin
11.05.2018
23:00:49
Я это просто к чему спрашиваю - в линуксе в аналогичной ситуации с core dump'ами нужно иметь бинарники которые вызывают методы вашего модуля

Timur
11.05.2018
23:00:52
Лучше, конечно, просить полные дампы приложений, чтобы хотя бы посмотреть как ваш код был вызван (и кто накосячил с аргументами)

olologin
11.05.2018
23:01:08
https://sourceware.org/ml/archer/2008-q4/msg00119.html
иначе без бинарников вообще даже на стек не посмотреть в своём модуле
но пару раз в год бывает когда у заказчика какой-то неповторяемый ад происходит

Timur
11.05.2018
23:03:14
в windows с этим лучше - не нужно находиться в той же версии OS, т.к. отладчик сам может подгрузить и символы и на код посмотреть в дампе. Но должна быть настроена инфраструктура с символ серверами, а тут не тот случай

olologin
11.05.2018
23:03:57
ну да, я думаю в случае проблем просто самому собирать релиз с дебаг инфо и отсылать заказчику
этого на первое время достаточно должно быть

Timur
11.05.2018
23:05:39
можно даже и pdb отдавать заказчику, чтобы он на месте windbg !analyze -v мог запустить на дампе. Не забывайте только про ключ /pdbstripped