Библиотека C/C++ разработчика
7.31K subscribers
700 photos
724 videos
8 files
1K links
Полезные материалы по всему, что может быть полезно плюсовику/сишнику. По всем вопросам @evgenycarter
Download Telegram
Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?


Ответ:


⚫️Явное приведение типов в C++ происходит, когда программист явно указывает, что значение одного типа должно быть преобразовано в значение другого типа. Это делается с помощью операторов приведения типов, таких как static_cast, dynamic_cast, const_cast и reinterpret_cast¹.

⚫️Неявное приведение типов в C++ происходит автоматически, когда компилятор обнаруживает, что значение одного типа используется в контексте, где ожидается значение другого типа. Например, если вы пытаетесь присвоить значение типа int переменной типа double, компилятор автоматически преобразует значение int в значение double⁴.

⚫️Ключевое слово explicit используется для предотвращения неявных преобразований¹. Оно может быть использовано с конструкторами и функциями преобразования для указания того, что они не могут использоваться для неявных преобразований и копирования инициализации.

⚫️Например, если у вас есть класс с конструктором, который принимает один аргумент, вы можете использовать ключевое слово explicit, чтобы предотвратить неявное преобразование аргумента в объект вашего класса. Это может быть полезно, если вы хотите избежать ошибок, связанных с неожиданными неявными преобразованиями.

⚫️Вот простой пример использования ключевого слова explicit с конструктором:
class MyClass {
public:
explicit MyClass(int x) : m_x(x) {}
private:
int m_x;
};

int main() {
MyClass a = 5; // Ошибка: неявное преобразование запрещено
MyClass b(5); // ОК: явное преобразование
}


⚫️В этом примере конструктор класса MyClass объявлен как explicit, поэтому он не может использоваться для неявного преобразования значения int в объект класса MyClass. Попытка сделать это вызывает ошибку компиляции. Однако вы все еще можете использовать конструктор для явного преобразования значения int в объект класса MyClass, как показано в строке с объявлением переменной b.

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🥱21
Примеры исходного кода C++

Эта страница содержит примеры исходного кода функций стандартной библиотеки программирования C++.

https://www.sourcecodeexamples.net/p/cpp-source-code-examples.html

#cpp #programming

👉 @cpp_lib
👍93🤔2🗿1
Go-like каналы на C++

Каналы (channels, pipes) – это удобная абстракция для построения приложений, работающих в многопоточной среде. Они используются для передачи сообщений между потоками и, одновременно с этим, как средство синхронизации потоков. Я буду ссылаться на "Go-style channels", т.к. на мой взгляд, важная особенность каналов в языке GO – это возможность их мультиплексировать.

Реализации каналов на языке C++, конечно же, есть, например, в библиотеке boost::fibers, можно найти реализацию двух видов каналов. В документации boost::fibers можно найти описания способов мультиплексирования, правда не самих каналов, но и к ним можно применить подобную технику.

https://habr.com/ru/articles/805561/

#cpp #programming

👉 @cpp_lib
👍8
📕Pro Cryptography and Cryptanalysis with C++23: Creating and Programming Advanced Algorithms, 2nd Edition
Автор: Marius Iulian Mihailescu (2023)

Сформировать прочные навыки написания криптографических алгоритмов и схем/модулей безопасности с использованием языка C++23 и его новых возможностей. Эта книга научит вас правильным методам написания продвинутых криптографических алгоритмов, таких как алгоритмы криптографии на основе эллиптических кривых, криптографии на основе решетки, шифрования с поиском и гомоморфного шифрования. Вы также рассмотрите внутренние криптографические механизмы и узнаете общие способы реализации и правильного использования алгоритмов на практике.

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Что такое Uniform initialization? Aggregate initialization?

Uniform initialization, введенная в C++11, позволяет использовать единый синтаксис для инициализации переменных и объектов, начиная от примитивных типов до агрегатов¹. Другими словами, она вводит инициализацию скобками, которая использует фигурные скобки {} для заключения значений инициализатора. Синтаксис выглядит следующим образом: type var_name {arg1, arg2, ....arg n}.

Aggregate initialization - это форма инициализации списком для массивов или типов класса (часто структур или объединений), которые имеют: нет приватных или защищенных членов, нет пользовательских конструкторов, кроме явно заданных или удаленных конструкторов . Это позволяет напрямую инициализировать элементы агрегатов. Для этого мы предоставляем список инициализаторов в качестве инициализатора, который представляет собой список значений, разделенных запятыми.

Например, если у вас есть структура с несколькими членами:
struct Employee {
int id {};
int age {};
double wage {};
};


Когда мы определяем объект с типом структуры, нам нужен способ инициализации нескольких членов во время инициализации:
Employee joe; // как мы инициализируем joe.id, joe.age и joe.wage?

Агрегаты используют форму инициализации, называемую агрегатной инициализацией, которая позволяет нам напрямую инициализировать элементы агрегатов. Для этого мы предоставляем список инициализаторов в качестве инициализатора, который представляет собой список значений, разделенных запятыми. Так же как обычные переменные могут быть скопированы, напрямую инициализированы или списком инициализированы, есть 3 формы агрегатной инициализации.

#cpp #programming

👉 @cpp_lib
👍6
Краткое сравнение популярных функций измерения времени

Решил обновить свою старую крохотную библиотечку для тайминга кода. Измерение коротких временнЫх интервалов в ней выполнялось с помощью: инструкции RDTSC при компиляции MSC для x86 и gettimeofday при сборке GCC под Linux. IMHO, на сегодняшний день это не самые правильные методы, и захотелось объективно выбрать что-то более точное и лёгкое. Для этого были измерены несколько параметров наиболее популярных функций измерения времени. Результатами этих измерений и делюсь с вами (вдруг кому тоже интересно).

https://habr.com/ru/articles/818965/

#cpp #programming

👉 @cpp_lib
👍5
👩‍💻 Шпаргалка по C++

Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14

#cpp #programming

👉 @cpp_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍115🔥2