c++-faq ×22
Создан 03.01.2025
5
голоса
5
ответов
13
просмотров
Основные цели std::forward и решаемые им проблемы

Описание проблемы:

Я изучаю концепцию идеальной передачи (perfect forwarding) в C++ и столкнулся с вопросом о том, как работает функция std::forward. В приведенном ниже коде std::forward используется для преобразования именованных rvalue-ссылок t1 и t2 в безымянные...

8
голоса
5
ответов
30
просмотров
Почему sizeof структуры не равен сумме sizeof её членов?

Почему оператор sizeof возвращает размер структуры, который больше суммы размеров её членов?

7
голоса
5
ответов
23
просмотров
"std::endl" против "\n": в чем разница?"

Проблема с выводом в C++

Во многих книгах по C++ содержатся примеры кода в следующем виде:

std::cout << "Test line" << std::endl;

Поэтому я всегда использовал именно этот вариант. Однако я заметил, что многие практикующие разработчики предпочитают другой подход:

std::cout <<...
9
голоса
5
ответов
51
просмотров
`std::wstring` против `std::string`: когда использовать и в чем разница?

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

  1. Когда следует использовать std::wstring вместо std::string?
  2. Может ли std::string содержать весь набор...
7
голоса
5
ответов
34
просмотров
Почему enum class считается более безопасным в использовании, чем обычный enum?

Я слышал, что некоторые люди рекомендуют использовать перечисления (enum classes) в C++ из-за их типобезопасности.

Но что это на самом деле означает?

7
голоса
5
ответов
19
просмотров
Когда можно использовать предварительное объявление?

Я ищу определение, когда я могу использовать предварительное объявление класса в заголовочном файле другого класса.

Разрешено ли мне использовать предварительное объявление для базового класса, для класса, который является членом, для класса, передаваемого в функцию-член по ссылке и т.д.?

7
голоса
5
ответов
30
просмотров
Что говорит стандарт C++ о размерах типов int и long?

Я ищу детальную информацию о размерах базовых типов C++. Я понимаю, что это зависит от архитектуры (16 бит, 32 бит, 64 бита) и компилятора.

Но существуют ли какие-либо стандарты для C++?

Я использую Visual Studio 2008 на 32-битной архитектуре. Вот что я получил:

char  : 1 byte
short : 2...
8
голоса
5
ответов
34
просмотров
Что означает 'const' в конце объявления метода класса?

Вопрос: Каково значение const в таких объявлениях?

У меня есть следующий фрагмент кода на C++:

class foobar
{
  public:
     operator int () const;
     const char* foo() const;
};

Я не совсем понимаю, какое значение имеет const в этих объявлениях. Что конкретно означает...

11
голоса
5
ответов
62
просмотров
Имеют ли круглые скобки после имени типа значение при использовании new?

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

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

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

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

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

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

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

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

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

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

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

Проблема

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

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

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

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

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

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

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

9
голоса
5
ответов
25
просмотров
Почему в макросах используются, казалось бы, бессмысленные операторы 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
ответов
41
просмотров
Что означает T&& (двойной амперсанд) в C++11?

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

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

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

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

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

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

Object *myObject = new Object;

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

Object myObject;

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

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

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

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

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

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

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

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