Comments 19
А можно ли жить в мире Windows без Qt и все строки хранить и обрабатывать как char в кодировке utf8 без необходимости в wchar_t?
+5
Поздравляю с новым опытом!
А вы сравнивали эффективность/удобство использования/кол-во найденых ошибок (PVS-Studio и CppCat) с другими анализаторами в новом для вас поприще. Переняли ли какие то идеи, например от cppcheck?
А вы сравнивали эффективность/удобство использования/кол-во найденых ошибок (PVS-Studio и CppCat) с другими анализаторами в новом для вас поприще. Переняли ли какие то идеи, например от cppcheck?
0
Не на новом поприще, но сравнивали.
Кратко: Сравнение анализаторов кода: CppCat, Cppcheck, PVS-Studio, Visual Studio.
Подробно: Как мы сравнивали анализаторы кода CppCat, Cppcheck, PVS-Studio, Visual Studio.
Dump: SCA_Comparison.xlsx.
Кратко: Сравнение анализаторов кода: CppCat, Cppcheck, PVS-Studio, Visual Studio.
Подробно: Как мы сравнивали анализаторы кода CppCat, Cppcheck, PVS-Studio, Visual Studio.
Dump: SCA_Comparison.xlsx.
+1
for (i = 0; i < strlen(str.c_str()); ++i)
Мне всегда казалось что параметры цикла считаются 1 раз, оказывается нет.
Оказывается если компилить с -O (optimize), то количество итераций вычисляется в начале цикла, но это зависит от сложности кода.
Без -O каждую итерацию…
Кому интересно:
0013 C745FC00 movl $0, -4(%rbp)
000000
001a EB04 jmp .L4
.L5:
001c 8345FC01 addl $1, -4(%rbp)
.L4:
0020 E8000000 call _Z9c_str_lenv
00
0025 3B45FC cmpl -4(%rbp), %eax
0028 0F9FC0 setg %al
002b 84C0 testb %al, %al
002d 75ED jne .L5
Это только фишка C++ или других языков тоже?
+1
PHP и Java работают так же.
-1
Это фишка вообще всех языков. Языки из Algol-ветки (в частности Pascal) декларируют, что вычисление всяких функций должно происходить лишь однажды, но на практике компиляторы, скажем, Delphi всё равно делают как C/C++.
Всё просто: что будет, если у вас str в теле цикла меняется? В C/C++/Java/etc это законно. В Pascal это заботливо объявлено «undefined behavior» и, вроде как, программист виноват — но на практике компиляторы такие случаи обрабатывают всё равно.
Ну а дальше — если оптимизатор сможет, то он попробует цикл соптимизировать. Если сможет.
Всё просто: что будет, если у вас str в теле цикла меняется? В C/C++/Java/etc это законно. В Pascal это заботливо объявлено «undefined behavior» и, вроде как, программист виноват — но на практике компиляторы такие случаи обрабатывают всё равно.
Ну а дальше — если оптимизатор сможет, то он попробует цикл соптимизировать. Если сможет.
+1
Самое интересное что в цикле for мне как бы не пришло в голову менять размер строки, скорее всего взял бы while
Просто как то в литературе указано
Если известно количество итераций за ранее, то for
Если не известно, то while
Но информация интересная, ее нужно популяризировать.
Просто как то в литературе указано
Если известно количество итераций за ранее, то for
Если не известно, то while
Но информация интересная, ее нужно популяризировать.
0
Ну вообще цикл for всегда описывался как
for (инициализатор; условие выхода; итератор)
В принципе достаточно естественно, что выражение условия выхода вычисляется каждый раз. Если хочетсякак-то ограничить количество итераций уменьшить количество вычислений и есть уверенность, что выражение в условии не поменяется — можно вычислить переменную, скажем
Вот только в такой ситуации нужно действительно иметь полную уверенность, что рассматриваемое выражение (в данном случае строка) не изменится в процессе выполнения цикла. Т.е. в данном случае — если строка инициализируется в этом же методе.
for (инициализатор; условие выхода; итератор)
В принципе достаточно естественно, что выражение условия выхода вычисляется каждый раз. Если хочется
int length = str.length();
for (int i = 0 ; i < length ; i++) {
}
Вот только в такой ситуации нужно действительно иметь полную уверенность, что рассматриваемое выражение (в данном случае строка) не изменится в процессе выполнения цикла. Т.е. в данном случае — если строка инициализируется в этом же методе.
0
опередили :)
0
Мне кажется было бы класно добавить
const
модификатор в циклы, но пока нигде такого не встречал, к сожалению.for (i = 0; i < const str.size(); ++i)
+1
Они давно есть, но вынесены за тело цикла — в моём комментарии, например
0
Sign up to leave a comment.
Команда PVS-Studio расширяет кругозор, выполняя разработку на заказ