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

163
В чем разница между istringstream, ostringstream и stringstream? / Почему бы не использовать stringstream в каждом случае?

Когда я буду использовать std::istringstream, std::ostringstreamи std::stringstreamпочему я не должен просто использовать std::stringstreamв каждом сценарии (есть ли проблемы с производительностью во время выполнения?). Наконец, есть ли что-то плохое в этом (вместо того, чтобы использовать поток...

163
Лучше использовать std :: memcpy () или std :: copy () с точки зрения производительности?

Лучше использовать, memcpyкак показано ниже, или лучше с std::copy()точки зрения производительности? Зачем? char *bits = NULL; ... bits = new (std::nothrow) char[((int *) copyMe->bits)[0]]; if (bits == NULL) { cout << "ERROR Not enough memory.\n"; exit(1); } memcpy (bits, copyMe->bits,...

163
Каковы преимущества использования nullptr?

Этот фрагмент кода концептуально делает то же самое для трех указателей (безопасная инициализация указателя): int* p1 = nullptr; int* p2 = NULL; int* p3 = 0; Итак, каковы преимущества назначения указателей nullptrперед присвоением им значений NULLили...

163
Почему преобразование из строковой константы в 'char *' допустимо в C, но недопустимо в C ++

Стандарт C ++ 11 (ISO / IEC 14882: 2011) гласит § C.1.1: char* p = "abc"; // valid in C, invalid in C++ Для C ++ все нормально, так как указатель на строковый литерал вреден, поскольку любая попытка его изменить приводит к сбою. Но почему это действительно в C? C ++ 11 также говорит: char* p =...

163
В примере Страуструпа, что означает двоеточие в «возврате 1: 2»?

Я не понимаю одно конкретное использование толстой кишки. Я нашел его в книге Бьярна Страуструпа « Язык программирования C ++ », 4-е издание, раздел 11.4.4 «Звони и возвращайся», стр. 297: void g(double y) { [&]{ f(y); } // return type is void auto z1 = [=](int x){ return x+y; } // return type...

162
Должен ли я хранить целые объекты или указатели на объекты в контейнерах?

Проектирование новой системы с нуля. Я буду использовать STL для хранения списков и карт определенных долгоживущих объектов. Вопрос: Должен ли я гарантировать, что мои объекты имеют конструкторы копирования и хранят копии объектов в моих контейнерах STL, или лучше вообще управлять жизнью и областью...

162
Что такое string_view?

string_viewбыла предложена особенность в рамках Основ библиотеки C ++ TS ( N3921 ), добавленная в C ++ 17 Насколько я понимаю, это тип, который представляет какую-то строковую «концепцию», которая представляет собой вид любого типа контейнера, который может хранить что-то видимое в виде строки. Это...

162
Почему этот цикл выдает «предупреждение: итерация 3u вызывает неопределенное поведение» и выводит более 4 строк?

Компилируя это: #include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i*1000000000 << std::endl; } и gccвыдает следующее предупреждение: warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i*1000000000...

161
Есть ли работающий инструмент C ++ для рефакторинга? [закрыто]

Закрыто. Этот вопрос не соответствует рекомендациям по переполнению стека . В настоящее время он не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме переполнения стека. Закрыто 6 месяцев назад . Улучшить этот вопрос Кто-нибудь знает полнофункциональный...

161
Почему конструктор по умолчанию без параметров исчезает при его создании с параметрами

В C #, C ++ и Java, когда вы создаете конструктор, принимающий параметры, стандартный параметр без параметров исчезает. Я всегда только принимал этот факт, но теперь я начал задаваться вопросом, почему. В чем причина такого поведения? Это просто «мера безопасности / догадка», говорящая «Если вы...

161
Как избежать переполнения в expr. A * B - C * D

Мне нужно вычислить выражение, которое выглядит следующим образом:, A*B - C*Dгде их типы: signed long long int A, B, C, D; Каждое число может быть очень большим (не выходя за пределы его типа). Хотя A*Bможет вызвать переполнение, в то же время выражение A*B - C*Dможет быть очень маленьким. Как я...

161
Как сгенерировать случайное число на C ++?

Я пытаюсь сделать игру с кубиками, и мне нужно, чтобы в ней были случайные числа (чтобы смоделировать стороны кубика. Я знаю, как сделать это между 1 и 6). С помощью #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() {...

161
std :: function против шаблона

Благодаря C ++ 11 мы получили std::functionсемейство упаковщиков функторов. К сожалению, я продолжаю слышать только плохие вещи об этих новых дополнениях. Наиболее популярным является то, что они ужасно медленные. Я проверил это, и они действительно сосут по сравнению с шаблонами. #include...

161
Почему мы требуем требует требует?

Один из углов концепций C ++ 20 заключается в том, что есть определенные ситуации, в которых вы должны писать requires requires. Например, этот пример из [expr.prim.req] / 3 : Требуется выражение также может быть использовано в требуете-положение ([Темп]) в качестве способа написания специальных...

160
Каковы гарантии сложности стандартных контейнеров?

Видимо ;-) стандартные контейнеры предоставляют некоторую форму гарантий. Какого рода гарантии и каковы различия между различными типами контейнеров? Работая со страницы SGI (о STL ), я придумал это: Container Types: ================ Container: Forward Container Reverse Container Random Access...

160
Стек, статика и куча в C ++

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

160
Как получить std :: vector указатель на необработанные данные?

Я пытаюсь использовать std::vectorв качестве charмассива. Моя функция принимает пустой указатель: void process_data(const void *data); Прежде чем я просто использовал этот код: char something[] = "my data here"; process_data(something); Который работал как ожидалось. Но теперь мне нужна...

160
В чем разница между std :: move и std :: forward

Я видел это здесь: Move Constructor вызывает базовый класс Move Constructor Может ли кто-нибудь объяснить: разница между std::moveи std::forward, желательно с некоторыми примерами кода? Как легко об этом думать, и когда использовать какой...

159
Шаблоны C ++, которые принимают только определенные типы

В Java вы можете определить универсальный класс, который принимает только те типы, которые расширяют класс по вашему выбору, например: public class ObservableList<T extends List> { ... } Это делается с помощью ключевого слова "extends". Есть ли какой-нибудь простой эквивалент этого ключевого...