Функция all_of
Эта функция работает со всем диапазоном элементов массива и может сэкономить время на запуск цикла для проверки каждого элемента по одному. Она проверяет заданное свойство для каждого элемента и возвращает true, когда каждый элемент в диапазоне удовлетворяет указанному свойству, иначе возвращает false.
В приведенном выше коде отрицательный элемент -6 отрицает условие и возвращает false.
Эта функция работает со всем диапазоном элементов массива и может сэкономить время на запуск цикла для проверки каждого элемента по одному. Она проверяет заданное свойство для каждого элемента и возвращает true, когда каждый элемент в диапазоне удовлетворяет указанному свойству, иначе возвращает false.
В приведенном выше коде отрицательный элемент -6 отрицает условие и возвращает false.
#вопросы_с_собеседований
Что за оператор −−> в С++?
Это старый хитрый вопрос. В С++ нет оператора −−>.
Рассмотрим такой код:
Выглядит так, как будто и правда есть оператор −−>, и если правильно объявить переменные p и m, то код даже скомпилируется и запустится:
Это означает: если p−− больше чем m (а это так), то надо сравнить результат (true) с нулём. Ну, true != 0, так что результат всего выражения — false, и функция f() не вызовется. Другими словами:
Пожалуйста, не тратьте много времени на подобные вопросы. Они сбивали с толку новичков ещё до того, как появился С++.
Что за оператор −−> в С++?
Это старый хитрый вопрос. В С++ нет оператора −−>.
Рассмотрим такой код:
if (p−−>m == 0) f(p);Выглядит так, как будто и правда есть оператор −−>, и если правильно объявить переменные p и m, то код даже скомпилируется и запустится:
int p = 2;
int m = 0;
if (p−−>m == 0) f(p);Это означает: если p−− больше чем m (а это так), то надо сравнить результат (true) с нулём. Ну, true != 0, так что результат всего выражения — false, и функция f() не вызовется. Другими словами:
if ((p−−) > m == 0) f(p);Пожалуйста, не тратьте много времени на подобные вопросы. Они сбивали с толку новичков ещё до того, как появился С++.
Инициализатор в if и switch
Вам должна понравиться такая возможность из С++17. Теперь вы можете выполнять инициализацию переменных и проверять условие внутри if или switch. Это даёт сделать код более лаконичным и чистым. Общая форма:
Вам должна понравиться такая возможность из С++17. Теперь вы можете выполнять инициализацию переменных и проверять условие внутри if или switch. Это даёт сделать код более лаконичным и чистым. Общая форма:
if (init-statement(x); condition(x)) {
// some code
}
else { // в else тоже видно x
// some more code
}Кортежи
Как и пара, кортеж представляет собой набор значений фиксированного размера для различных типов данных.
Иногда удобнее использовать
Как и пара, кортеж представляет собой набор значений фиксированного размера для различных типов данных.
Иногда удобнее использовать
std::array вместо кортежа. Такой массив подобен обычному массиву в Си вместе с несколькими функциями стандартной библиотеки C++. Эта структура данных была добавлена в 11 версии C++.this удобно использовать для цепочных вызовов
Мы можем вернуть ссылку на объект, на котором мы вызываем метод класса:
Мы можем вернуть ссылку на объект, на котором мы вызываем метод класса:
Foo &set(int x) { this->x = x; return *this; }
Здесь метод set возвращает ссылку на объект класса Foo(Foo&). Такая реализация метода позволяет нам писать код, подобный этому:obj.set(2).set(8);Это возможно, поскольку первый вызов метода set возвращает указатель на объект obj. Второй метод вызывается на объекте obj, т. е. можно переписать код так:
obj = obj.set(2);
obj = obj.set(8);Для тех кто в танке: this — это указатель на объект, из которого мы вызываем метод. С помощью указателя this и оператора -> можно обратиться к полям класса. Например так:
void getX() { return this->x; }
В большинстве случаев мы можем опустить часть this-> и написать просто x.Различие локальной переменной и поля класса с одинаковым именем
Указатель this может быть полезен в случае, когда локальная переменная в методе имеет то же самое имя, что и поле объекта:
Указатель this может быть полезен в случае, когда локальная переменная в методе имеет то же самое имя, что и поле объекта:
void set(int x) { this->x = x; }
Здесь в методе set мы присваиваем полю класса x значение локальной переменной this. Чтобы различить поле класса x и локальную переменную с тем же именем мы используем запись this->x при обращении к полю класса.this является const указателем
Указатель this является неизменяемым указателем. Убедимся это на примере:
Попробуем вызвать метод change в методе main:
Указатель this является неизменяемым указателем. Убедимся это на примере:
class Foo {
private:
int x;
public:
Foo(int x = 0) { this->x = x; }
void change(Foo *foo) { this = foo; }
void print() { cout << x << endl; }
};
Здесь в методе change мы пытаемся присвоить указателю this новое значение.Попробуем вызвать метод change в методе main:
Foo obj (3);
Foo *ptr;
obj.change(ptr);
obj.print();
Если мы запустим код, то получим ошибку компиляции в методе change (lvalue required as left operand of assignment). Компилятор не позволяет нам изменить значение указателя this.Создание кроссплатформенного мобильного и настольного приложения с помощью Qt 6.2.
https://16bpp.net/blog/post/making-a-cross-platform-mobile-desktop-app-with-qt-62/
https://16bpp.net/blog/post/making-a-cross-platform-mobile-desktop-app-with-qt-62/
Senior C++ Developer
this является const указателем Указатель this является неизменяемым указателем. Убедимся это на примере: class Foo { private: int x; public: Foo(int x = 0) { this->x = x; } void change(Foo *foo) { this = foo; } void print() { cout << x <<…
Указатель this доступен только внутри нестатических методов класса
Попробуем добавить такой метод в наш класс:
Это объясняется тем, что указатель this передаётся только в нестатические методы класса как скрытый параметр. В статических методах он недоступен.
Попробуем добавить такой метод в наш класс:
static void set(int x) { this->x = x; }
Здесь мы добавили для метода setмодификатор static.obj.set(6);
Мы получим ошибку компиляции: ‘this’ is unavailable for static member functions.Это объясняется тем, что указатель this передаётся только в нестатические методы класса как скрытый параметр. В статических методах он недоступен.
Курс современного C++ | Боннский университет, Германия.
https://youtube.com/playlist?list=PLgnQpQtFTOGR50iIOtO36nK6aNPtVq98C
https://youtube.com/playlist?list=PLgnQpQtFTOGR50iIOtO36nK6aNPtVq98C
Лучшие способы преобразования перечисления в строку.
https://belaycpp.com/2021/08/24/best-ways-to-convert-an-enum-to-a-string/
https://belaycpp.com/2021/08/24/best-ways-to-convert-an-enum-to-a-string/
Список рекомендуемых практик безопасного программирования на С++.
https://www.incredibuild.com/blog/top-10-secure-c-coding-practices
https://www.incredibuild.com/blog/top-10-secure-c-coding-practices
incredibuild
Top 10 secure C++ coding practices - incredibuild
Writing secure code that is not open for hacks and attacks is not a luxury. Learn about the top 10 secure C++ coding practices in this blog.