c++-faq ×15
Создан 03.01.2025
9
голоса
5
ответов
6
просмотров
`std::wstring` против `std::string`: когда использовать и в чем разница?

Я не могу понять различия между std::string и std::wstring. Я знаю, что std::wstring поддерживает широкие символы, такие как символы Unicode. У меня есть следующие вопросы:

  1. Когда следует использовать std::wstring вместо std::string?
  2. Может ли std::string содержать весь набор...
11
голоса
5
ответов
17
просмотров
Имеют ли круглые скобки после имени типа значение при использовании new?

Заголовок: Разница между созданием экземпляров класса в C++: new Test и new Test()

Текст проблемы:

Я изучаю C++ и столкнулся с вопросом о различиях между двумя способами создания экземпляра класса. Если Test является обычным классом, есть ли какая-либо разница между следующими строками...

11
голоса
4
ответов
14
просмотров
Что такое std::move() и когда его следует использовать?

Проблема: Необходимость в разъяснении функциональности и применения технологии

  1. Что это?
    Я столкнулся с [название технологии или инструмента], и мне не совсем ясно, что это такое и какие его основные характеристики.

  2. Что он делает?
    Хотел бы получить ясное объяснение...

13
голоса
2
ответов
13
просмотров
Где и зачем нужно использовать ключевые слова "template" и "typename"?

В шаблонах, где и почему мне нужно указывать typename и template для зависимых имен? Что такое зависимые имена?

У меня есть следующий код:

template  // Tail тоже будет UnionNode.
struct UnionNode : public Tail {
    // ...
    template  struct inUnion {
        // Вопрос: где нужно...
9
голоса
0
ответов
16
просмотров
Новые возможности C++17: что стоит знать?

Проблема

C17 теперь является завершённым, и в него было предложено множество новых возможностей. В связи с этим у меня возник следующий вопрос: какие именно функции были добавлены в C в версии C++17?

Я использую компилятор C++, который поддерживает "C++1z". Могу ли я узнать, какие из...

17
голоса
0
ответов
8
просмотров
Что такое лямбда-выражение и когда его следует использовать?

Вопрос: Что такое лямбда-выражение в C++11? В каких ситуациях я мог бы его использовать? Какие классы задач они решают, что было невозможно до их введения?

Несколько примеров и областей применения были бы полезны.

34
голоса
5
ответов
35
просмотров
В чем проблема с "using namespace std;"?

Я слышал, что использование using namespace std; считается плохой практикой, и что мне следует прямо использовать stdcout и stdcin. Почему это так? Не возникает ли риска объявления переменных с такими же именами, как что-то в пространстве имен std? Есть ли проблемы с производительностью?

9
голоса
5
ответов
4
просмотров
Почему в макросах используются, казалось бы, бессмысленные операторы do-while и if-else?

В многих макросах на C/C++ я замечаю, что код макроса обернут в циклы do while, которые, по сути, кажутся бессмысленными. Вот примеры: #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else

Я не понимаю, зачем нужен do while. Почему нельзя просто написать это без...

11
голоса
1
ответов
12
просмотров
Что означает T&& (двойной амперсанд) в C++11?

Я изучаю новые возможности C++11, и одна из них, которую я заметил, — это двойной амперсанд при объявлении переменных, например, T&& var.

Во-первых, как называется эта конструкция? Мне бы хотелось, чтобы Google позволял искать подобные символы.

Что именно это означает?

На первый взгляд, кажется,...

19
голоса
5
ответов
15
просмотров
Почему следует использовать указатель вместо самого объекта?

Я пришёл из мира Java и начал работать с объектами в C++. Но меня смутило, что многие разработчики часто используют указатели на объекты, а не сами объекты. Например, вот так:

Object *myObject = new Object;

вместо этого:

Object myObject;

Также, вместо того чтобы...

18
голоса
4
ответов
15
просмотров
Ошибка "Неопределенная ссылка/нестираемая внешняя символ" — что это такое и как её исправить?

Что такое ошибки "неопределенная ссылка"/"нерешенный внешний символ"? Каковы их общие причины и как можно исправить и предотвратить эти ошибки?

25
голоса
5
ответов
13
просмотров
Что такое Правило трёх?

Проблема с копированием объектов в C++:

  1. Что означает копирование объекта?
  2. Что такое конструктор копирования и оператор присваивания копии?
  3. Когда мне нужно объявлять их самостоятельно?
  4. Как я могу предотвратить копирование своих объектов?
10
голоса
2
ответов
11
просмотров
Правила использования символа подчеркивания в идентификаторах C++

В C++ распространено именовать переменные-члены с использованием префикса, чтобы обозначить, что это переменные класса, а не локальные переменные или параметры. Если вы работали с MFC, вы, вероятно, используете m_foo. Я также иногда видел использование myFoo.

В C# (или, возможно, только в .NET)...

12
голоса
5
ответов
6
просмотров
Какова разница между публичным, приватным и защищённым наследованием?

Вопрос: Какова разница между public, private и protected наследованием в C++?

Описание проблемы: Я изучаю C++ и пытаюсь разобраться в различных типах наследования, но не могу понять, как именно различаются public, private и protected наследования. Как они влияют на доступ к членам...

18
голоса
5
ответов
11
просмотров
Разница между const int*, const int * const и int * const?

Я всегда путаюсь, как правильно использовать const int *, const int * const и int * const. Существенно ли их различие? Существуют ли какие-то правила, определяющие, что можно, а что нельзя делать с этими указателями?

Мне нужно знать все "можно" и "нельзя" в контексте присваивания, передачи...