Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
if(strcmp(s,r)) выполняется, когда они не равны, а if(strcmp(s,r)==0) — когда равны.if(strcmp(s,r)) {
// когда равны
}
if(!strcmp(s,r)) {
// когда не равны
}
Нет. Это язык со статической типизацией, но она не строга ни в смысле гарантий, ни в смысле выразительности.
Так и не понял, что именно тут плохо. Какие-то общие слова, что можно делать ошибки. Так, наверное, можно вообще про любую языковую фичу написать в любом языке.
В C#, кстати, есть rvalue-ссылки и вообще move semantics?
То есть, если вы пишете управляющий ресурсом класс, то его, внезапно, надо сесть и писать. Нетривиальный вывод!
Неверная логика. Инициализация нулями не нарушает гарантий, даваемых С. Дело скорее в производительности.
Не понял логики. А как же порядок объявления членов?
Только это всё же не совсем то. Начиная с C++11 статик-переменные уровня функций инициализируются потокобезопасно, что, конечно, хорошо, но ведёт к очевидной дополнительной плате на синхронизацию при каждом входе в такую функцию.
Не использовать сырое new. 2018 год на дворе уже, ё-моё.
Использовать make_unique и make_shared.
Судя по общему тону до этого, считается, что это в C# сделано типа хорошо?
В C# программист тоже может сделать в unsafe-блоке какую-нибудь ерунду, разве нет?
Да и говорить о сборщике мусора как о спасении от «значительной части» проблем, как будто единственный существующий ресурс — это память, ну очень примитивно.
Почти все эти "проблемы" решаются изучением справки к компилятору и включением флагов.
-Werror
-Wall
-Wextra
-Wpedantic
-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wenum-compare
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo
Проблемные аспекты программирования на С++