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

C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который будет скомпилирован с помощью компилятора C ++). Используйте тег, зависящий от версии, для вопросов, связанных с конкретной редакцией стандарта [C ++ 11], [C ++ 14], [C ++ 17] или [C ++ 20] и т. Д.

9
Зачем создавать язык с уникальными анонимными типами?
Это то, что меня всегда беспокоило как особенность лямбда-выражений C ++: тип лямбда-выражения C ++ уникален и анонимен, я просто не могу его записать. Даже если я создам две лямбда-выражения, которые синтаксически совершенно одинаковы, результирующие типы определены как разные. Следствием этого является то, что а) лямбда-выражения могут быть переданы только …

5
Почему лямбда имеет размер 1 байт?
Я работаю с памятью некоторых лямбд в C ++, но меня немного озадачивает их размер. Вот мой тестовый код: #include <iostream> #include <string> int main() { auto f = [](){ return 17; }; std::cout << f() << std::endl; std::cout << &f << std::endl; std::cout << sizeof(f) << std::endl; } Вы …
90 c++  c++11  lambda  c++14  sizeof 

3
Как сделать условное определение типа в C ++
Я пытаюсь сделать что-то вроде этого: #include <iostream> #include <random> typedef int Integer; #if sizeof(Integer) <= 4 typedef std::mt19937 Engine; #else typedef std::mt19937_64 Engine; #endif int main() { std::cout << sizeof(Integer) << std::endl; return 0; } но я получаю эту ошибку: error: missing binary operator before token "(" Как правильно …
90 c++  c++11 

4
Почему memmove быстрее, чем memcpy?
Я исследую «горячие точки» производительности в приложении, которое 50% времени проводит в memmove (3). Приложение вставляет миллионы 4-байтовых целых чисел в отсортированные массивы и использует memmove для смещения данных «вправо», чтобы освободить место для вставленного значения. Я ожидал, что копирование памяти происходит очень быстро, и был удивлен, что в memmove …
90 c++  c  performance  memory 

2
Ошибка при использовании внутриклассовой инициализации нестатического члена данных и конструктора вложенного класса
Следующий код довольно тривиален, и я ожидал, что он будет нормально компилироваться. struct A { struct B { int i = 0; }; B b; A(const B& _b = B()) : b(_b) {} }; Я тестировал этот код с g ++ версии 4.7.2, 4.8.1, clang ++ 3.2 и 3.3. Помимо …

2
Разрешена ли такая оптимизация с плавающей запятой?
Я попытался проверить, где floatтеряет способность точно представлять большие целые числа. Итак, я написал этот небольшой фрагмент: int main() { for (int i=0; ; i++) { if ((float)i!=i) { return i; } } } Этот код работает со всеми компиляторами, кроме clang. Clang генерирует простой бесконечный цикл. Godbolt . Это …



6
Должен ли я получить блокировку перед вызовом condition_variable.notify_one ()?
Я немного запутался в использовании std::condition_variable. Я понимаю , что я должен создать unique_lockна mutexперед вызовом condition_variable.wait(). Я не могу найти, нужно ли мне также получить уникальную блокировку перед вызовом notify_one()или notify_all(). Примеры на cppreference.com противоречивы. Например, страница notify_one дает следующий пример: #include <iostream> #include <condition_variable> #include <thread> #include <chrono> …

11
Как получить использование памяти во время выполнения с помощью C ++?
Мне нужно получить использование памяти VIRT и RES во время выполнения моей программы и отобразить их. Что я пробовал до сих пор: getrusage ( http://linux.die.net/man/2/getrusage ) int who = RUSAGE_SELF; struct rusage usage; int ret; ret=getrusage(who,&usage); cout<<usage.ru_maxrss; но я всегда получаю 0.

2
Какова цель использования союза только с одним членом?
Когда я читал исходный код seastar , я заметил, что существует структура объединения, tx_sideкоторая имеет только один член. Это какой-то хак для решения определенной проблемы? К вашему сведению, я вставляю tx_sideструктуру ниже: union tx_side { tx_side() {} ~tx_side() {} void init() { new (&a) aa; } struct aa { std::deque<work_item*> …
89 c++  c++14  unions 

6
Есть ли причина не использовать глобальные лямбды?
У нас была функция, которая использовала не захватывающую внутреннюю лямбду, например: void foo() { auto bar = [](int a, int b){ return a + b; } // code using bar(x,y) a bunch of times } Теперь функциональность, реализованная лямбда-выражением, стала необходимой в другом месте, поэтому я собираюсь вывести лямбда-вывод из …
89 c++  lambda 

12
Как объявить массив строк в C ++?
Я пытаюсь перебрать все элементы статического массива строк наилучшим образом. Я хочу иметь возможность объявлять его в одной строке и легко добавлять / удалять из него элементы без необходимости отслеживать номер. Звучит очень просто, не правда ли? Возможные нерешения: vector<string> v; v.push_back("abc"); b.push_back("xyz"); for(int i = 0; i < v.size(); …
89 c++  arrays 

7
Теперь, когда у нас есть std :: array, что еще остается для массивов в стиле C?
std::arrayзначительно превосходит массивы C. И даже если я хочу взаимодействовать с устаревшим кодом, я могу просто использовать std::array::data(). Есть ли причина, по которой мне когда-либо понадобится массив старой школы?

3
Что такое правило «как если бы»?
Как сказано в названии, Что такое правило «как если бы»? Типичный ответ, который можно получить: Правило, разрешающее любые преобразования кода, которые не изменяют наблюдаемое поведение программы. Время от времени мы получаем поведение от определенных реализаций, которые приписываются этому правилу. Много раз ошибочно. Итак, что же это за правило. В стандарте …
89 c++  c  optimization  c++-faq  as-if 

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.