Работа с файлами
Например, необходимо создать текстовый файл и записать в него строку "Работа с файлами в С++". Для этого необходимо проделать следующие шаги:
1) создать объект класса ofstream;
2) связать объект класса с файлом, в который будет производиться запись;
3) записать строку в файл;
4) закрыть файл.
Например, необходимо создать текстовый файл и записать в него строку "Работа с файлами в С++". Для этого необходимо проделать следующие шаги:
1) создать объект класса ofstream;
2) связать объект класса с файлом, в который будет производиться запись;
3) записать строку в файл;
4) закрыть файл.
#вопросы_с_собеседований
Что такое ссылка? Как можно инициализировать ссылку одной или другой переменной в зависимости от условия?
Ответ:
Это другое имя для переменной. Ссылку необходимо инициализировать при объявлении и изменять уже нельзя. С помощью тернарного оператора или с помощью лямбда-функции.
Что такое ссылка? Как можно инициализировать ссылку одной или другой переменной в зависимости от условия?
Ответ:
Как проходит собеседование начинающего разработчика на С++: что нужно знать и как подготовиться
В этом посте я собрал подборку понятий и терминов, которые у вас могут спросить на собеседовании на вакансию Junior С++ разработчика, и описал, к чему в принципе вам стоит готовиться.
Смотреть статью
В этом посте я собрал подборку понятий и терминов, которые у вас могут спросить на собеседовании на вакансию Junior С++ разработчика, и описал, к чему в принципе вам стоит готовиться.
Смотреть статью
Хабр
Как проходит собеседование начинающего разработчика на С++: что нужно знать и как подготовиться
В разных компаниях собеседования проводятся по-разному в зависимости от стандартов, продуктов, позиций. Но есть базовые вещи, повторив которые, вы сможете подготовиться к любому собеседованию. В этом...
Сайт на чистом C++, nginx и FastCGI
В этом видео мы создадим сервер, развернем простейший сайт на nginx и начнем работать с FastCGI, чтобы обрабатывать HTTP запросы в своем коде на C++.
Смотреть видео
В этом видео мы создадим сервер, развернем простейший сайт на nginx и начнем работать с FastCGI, чтобы обрабатывать HTTP запросы в своем коде на C++.
Смотреть видео
Лучшие инструменты и советы начинающему C++ программисту
Хотите изучать C++? Делимся важными навыками, фреймворками и советами, которые помогут начинающему C++ программисту устроиться на работу.
https://proglib.io/p/cpp-dev-skills
Хотите изучать C++? Делимся важными навыками, фреймворками и советами, которые помогут начинающему C++ программисту устроиться на работу.
https://proglib.io/p/cpp-dev-skills
#вопросы_с_собеседований
Какую проблему решает пространство имён?
Пространство имен — это идентификатор, предоставляющий несколько библиотек. Используется для устранения конфликтов имен, когда имя связано с двумя или более библиотеками. Включает внешние объявления библиотеки с уникальными пространствами имен, что исключает возможность конфликта.
Какую проблему решает пространство имён?
Пространство имен — это идентификатор, предоставляющий несколько библиотек. Используется для устранения конфликтов имен, когда имя связано с двумя или более библиотеками. Включает внешние объявления библиотеки с уникальными пространствами имен, что исключает возможность конфликта.
#вопросы_с_собеседований
Как следует обрабатывать ошибки во время выполнения в C++?
— Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
— Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
— Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
Как следует обрабатывать ошибки во время выполнения в C++?
— Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
— Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
— Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
#вопросы_с_собеседований
Объясните ключевые слова
Ключевое слово
Ключевое слово
Объясните ключевые слова
mutable
и volatile
.Ключевое слово
volatile
сообщает компилятору, что переменная может измениться без ведома компилятора. Переменные, объявленные как volatile
, не будут кэшироваться компилятором и, таким образом, всегда будут считываться из памяти.Ключевое слово
mutable
можно использовать для переменных-членов класса. Изменяемые переменные могут меняться из константных функций-членов класса.Проверка возможности конструирования элемента с набором конкретных параметров
Когда шаблонный класс задан в виде
Когда шаблонный класс задан в виде
template<class T, typename... Args>
, бывает трудно понять, какие аргументы можно использовать. Метод is_constructible
из библиотеки type_traits
даёт неполный ответ: он показывает, существует ли конструктор под конкретные аргументы. Для более полной картины можно использовать еще один шаблон.std::tie
Она может использоваться для распаковки кортежей или пары значений в отдельные переменные. Например, если у вас есть функция, которая возвращает
В этом примере мы используем
Это позволяет нам проверить, было ли значение успешно вставлено в набор.
std::tie
— это функция, которая создает кортеж ссылок на lvalue
из своих аргументов или экземпляров std::ignore
. Она может использоваться для распаковки кортежей или пары значений в отдельные переменные. Например, если у вас есть функция, которая возвращает
std::pair
или std::tuple
, вы можете использовать std::tie
, чтобы присвоить значения этого кортежа отдельным переменным.В этом примере мы используем
std::tie
для распаковки результата вызова set_of_s.insert(value)
в две переменные: итератор iter
и логическую переменную inserted
. Это позволяет нам проверить, было ли значение успешно вставлено в набор.
constinit
Если переменная, объявленная с
Переменная может быть одновременно
constinit
— это новый ключевое слово и спецификатор в C++20. Он используется для объявления переменных со статическим или потоковым временем хранения. Если переменная объявлена с constinit
, ее инициализирующее объявление должно быть выполнено с constinit
. Если переменная, объявленная с
constinit
, имеет динамическую инициализацию (даже если она выполняется как статическая инициализация), программа является некорректной.constinit
гарантирует, что переменная инициализируется на этапе компиляции, и что статическая инициализация не может привести к проблемам с порядком инициализации. Однако он не делает переменную неизменяемой и не подразумевает const
или constexpr
. Однако constexpr
подразумевает constinit
. Переменная может быть одновременно
const
и constinit
, но не может быть одновременно constexpr
и constinit
.#вопросы_с_собеседований
Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?
в C++ выбрасывать исключения из конструктора можно. Это обычно делается, когда в процессе инициализации объекта происходит ошибка, и объект не может быть корректно сконструирован.
Если исключение выбрасывается из конструктора, то все поля, которые были успешно сконструированы до момента выброса исключения, будут корректно разрушены. Это гарантируется механизмом исключений в C++.
Важно помнить, что только те поля, которые были успешно сконструированы, будут разрушены. Если исключение выбрасывается в процессе конструирования поля, то это поле не будет разрушено, так как его конструктор не был успешно завершен.
Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?
Если исключение выбрасывается из конструктора, то все поля, которые были успешно сконструированы до момента выброса исключения, будут корректно разрушены. Это гарантируется механизмом исключений в C++.
Важно помнить, что только те поля, которые были успешно сконструированы, будут разрушены. Если исключение выбрасывается в процессе конструирования поля, то это поле не будет разрушено, так как его конструктор не был успешно завершен.
Глубокое копирование
Термин глубокое копирование подразумевает создание нового объекта и копирование всех значений полей исходного объекта в новый объект. Если поле является указателем, то вместо копирования самого указателя создается новый объект, на который указывает исходный указатель, и новый указатель на этот новый объект сохраняется в новом объекте.
Это отличается от поверхностного копирования, при котором копируются только значения полей, включая указатели, но не объекты, на которые они указывают.
В этом примере у нас есть класс
В функции
Термин глубокое копирование подразумевает создание нового объекта и копирование всех значений полей исходного объекта в новый объект. Если поле является указателем, то вместо копирования самого указателя создается новый объект, на который указывает исходный указатель, и новый указатель на этот новый объект сохраняется в новом объекте.
Это отличается от поверхностного копирования, при котором копируются только значения полей, включая указатели, но не объекты, на которые они указывают.
В этом примере у нас есть класс
Deep
, который содержит указатель data
. В копирующем конструкторе мы создаем новый объект Deep
, копируя значение, на которое указывает data
в исходном объекте, а не сам указатель.В функции
main
мы создаем объект obj1
и затем создаем obj2
, используя копирующий конструктор. Затем мы меняем значение, на которое указывает data
в obj2
, и это не влияет на obj1
, что подтверждает, что было выполнено глубокое копирование.Заполняем вектор последовательными значениями
С этим нам поможет функция
В этом примере мы создаем вектор из 10 элементов, заполняем его значениями от 1 до 10 с помощью
С этим нам поможет функция
std::iota
, которая является частью библиотеки <numeric>
. Она используется для заполнения диапазона последовательными значениями, начиная с определенного значения.В этом примере мы создаем вектор из 10 элементов, заполняем его значениями от 1 до 10 с помощью
std::iota
и выводим вектор.