Вопросы с тегом «c++-faq»

131
Почему использование «нового» вызывает утечку памяти?

Сначала я выучил C #, а теперь начинаю с C ++. Насколько я понимаю, оператор newв C ++ не похож на оператор в C #. Можете ли вы объяснить причину утечки памяти в этом примере кода? class A { ... }; struct B { ... }; A *object1 = new A(); B object2 = *(new...

130
Перегрузка операторов доступа к членам ->,. *

Я понимаю , большинство перегрузки операторов, за исключением операторов доступа члена ->, .*, и ->*т.д. В частности, что передается этим операторным функциям, а что нужно возвращать? Как операторная функция (например operator->(...)) узнает, на какой член ссылается? Это может знать? Это...

129
Полиморфизм в C ++

НАСКОЛЬКО МНЕ ИЗВЕСТНО: C ++ предоставляет три различных типа полиморфизма. Виртуальные функции Перегрузка имени функции Перегрузка оператора В дополнение к трем вышеупомянутым типам полиморфизма существуют и другие виды полиморфизма: во время выполнения время компиляции специальный полиморфизм...

127
Когда в C ++ 11 сделать тип неподвижным?

Я был удивлен, что это не появилось в моих результатах поиска, я подумал, что кто-то спросил бы об этом раньше, учитывая полезность семантики перемещения в C ++ 11: Когда мне нужно (или это хорошая идея) сделать класс неподвижным в C ++ 11? (Причины, отличные от проблем совместимости с существующим...

122
Правильное использование стека и кучи в C ++?

Я занимаюсь программированием некоторое время, но в основном это были Java и C #. На самом деле мне никогда не приходилось управлять памятью самостоятельно. Я недавно начал программировать на C ++, и я немного не понимаю, когда мне следует хранить вещи в стеке, а когда - в куче. Я понимаю, что...

121
Какие реализации смарт-указателя C ++ доступны?

Сравнение, плюсы, минусы и когда использовать? Это побочный продукт ветки сборки мусора, где то, что я считал простым ответом, вызвало много комментариев о некоторых конкретных реализациях интеллектуальных указателей, поэтому казалось, что стоит начать новый пост. В конечном итоге вопрос...

120
Почему в заголовке указаны встроенные функции C ++?

NB. Это не вопрос о том, как использовать встроенные функции или как они работают, а скорее о том, почему они сделаны такими, какие есть. Объявление функции-члена класса не требует определения функции, поскольку inlineэто только фактическая реализация функции. Например, в заголовочном файле: struct...

120
Как преобразовать число в строку и наоборот в C ++

Поскольку этот вопрос задают каждую неделю, этот FAQ может помочь многим пользователям. Как преобразовать целое число в строку в C ++ как преобразовать строку в целое число в C ++ как преобразовать число с плавающей запятой в строку в C ++ как преобразовать строку в число с плавающей запятой в C ++...

115
Как перегрузить std :: swap ()

std::swap() используется многими стандартными контейнерами (такими как std::list и std::vector) во время сортировки и даже назначения. Но стандартная реализация swap() очень обобщена и довольно неэффективна для пользовательских типов. Таким образом, эффективность может быть повышена за счет...

109
Другой результат с плавающей запятой при включенной оптимизации - ошибка компилятора?

Приведенный ниже код работает в Visual Studio 2008 с оптимизацией и без нее. Но работает только на g ++ без оптимизации (O0). #include <cstdlib> #include <iostream> #include <cmath> double round(double v, double digit) { double pow = std::pow(10.0, digit); double t = v * pow;...

109
Почему std :: getline () пропускает ввод после форматированного извлечения?

У меня есть следующий фрагмент кода, который запрашивает у пользователя свое имя и статус: #include <iostream> #include <string> int main() { std::string name; std::string state; if (std::cin >> name && std::getline(std::cin, state)) { std::cout << "Your name is "...

106
Что такое прозрачные компараторы?

В C ++ 14 ассоциативные контейнеры, похоже, изменились с C ++ 11 - [associative.reqmts] / 13 говорит: Шаблоны функций - членов find, count, lower_bound, upper_bound, и equal_rangeне должен участвовать в разрешении перегрузки , если тип Compare::is_transparentне существует. Какова цель сделать...

101
Почему простая программа в стиле «Hello World» не компилируется с Turbo C ++?

Я начал изучать C ++ для своего класса программирования. Я скачал эту программу "Hello World": #include <iostream> using namespace std; int main() { cout << "Hello, World!"; return 0; } но Turbo C ++ жалуется: Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM' Error...

98
Каков правильный ответ для cout << a ++ << a ;?

Недавно в интервью был задан следующий вопрос объективного типа. int a = 0; cout << a++ << a; Ответы: а. 10 б. 01 с. неопределенное поведение Я ответил на вариант b, т.е. вывод будет «01». Но, к моему удивлению, позже интервьюер сказал мне, что правильный ответ - вариант c: undefined....

96
Лучшие практики для операций кругового сдвига (поворота) в C ++

Операторы сдвига влево и вправо (<< и >>) уже доступны в C ++. Однако я не мог понять, как я могу выполнять операции кругового сдвига или поворота. Как можно выполнять такие операции, как «Повернуть влево» и «Повернуть вправо»? Здесь дважды вращается вправо Initial --> 1000 0011...

94
В чем смысл указателей на функции?

Мне сложно увидеть полезность указателей на функции. Я предполагаю, что в некоторых случаях это может быть полезно (в конце концов, они существуют), но я не могу придумать случая, когда лучше или неизбежно использовать указатель на функцию. Не могли бы вы привести пример правильного использования...

92
Функция с тем же именем, но другой подписью в производном классе

У меня есть функция с тем же именем, но с другой сигнатурой в базовом и производном классах. Когда я пытаюсь использовать функцию базового класса в другом классе, который наследуется от производного, я получаю сообщение об ошибке. См. Следующий код: class A { public: void foo(string s){}; }; class...

91
Когда лишние круглые скобки влияют, кроме приоритета оператора?

Круглые скобки в C ++ используются во многих местах: например, в вызовах функций и выражениях группировки для переопределения приоритета операторов. Помимо недопустимых дополнительных круглых скобок (например, вокруг списков аргументов вызова функций), общее, но не абсолютное правило C ++ состоит...