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

159
Использование умных указателей для учеников

У меня проблемы с пониманием использования умных указателей в качестве членов класса в C ++ 11. Я много читал об умных указателях и думаю, что понимаю, как unique_ptrи shared_ptr/ или weak_ptrработаю в целом. То, что я не понимаю, является реальным использованием. Кажется, что все рекомендуют...

157
Переместить захват в лямбду

Как мне перехватить по ходу (также известный как rvalue reference) в лямбда-выражении C ++ 11? Я пытаюсь написать что-то вроде этого: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4;...

156
std :: enable_if для условной компиляции функции-члена

Я пытаюсь получить простой пример для работы, чтобы понять, как использовать std::enable_if. Прочитав этот ответ , я подумал, что не должно быть слишком сложно привести простой пример. Я хочу использовать std::enable_ifдля выбора между двумя функциями-членами и разрешить использовать только одну из...

155
Зачем кому-то использовать set вместо unordered_set?

Представляем C ++ 0x, unordered_setкоторый доступен во boostмногих других местах. Я понимаю, что unordered_setэто хеш-таблица со O(1)сложностью поиска. С другой стороны, setэто не что иное, как дерево со log(n)сложностью поиска. Зачем кому-то использовать setвместо unordered_set? т.е. есть ли...

155
Рекурсивные лямбда-функции в C ++ 11

Я новичок в C ++ 11. Я пишу следующую рекурсивную лямбда-функцию, но она не компилируется. sum.cpp #include <iostream> #include <functional> auto term = [](int a)->int { return a*a; }; auto next = [](int a)->int { return ++a; }; auto sum = [term,next,&sum](int a, int...

155
Когда использовать std :: forward для пересылки аргументов?

C ++ 0x показывает пример использования std::forward: template<class T> void foo(T&& arg) { bar(std::forward<T>(arg)); } Когда выгодно использовать std::forwardвсегда? Кроме того, он требует использования &&в декларации параметров, действительно ли это во всех случаях? Я...

153
Оптимизация «время (1);» в C ++ 0x

Обновлено, смотрите ниже! Я слышал и читал, что C ++ 0x позволяет компилятору напечатать «Hello» для следующего фрагмента #include <iostream> int main() { while(1) ; std::cout << "Hello" << std::endl; } По-видимому, это как-то связано с потоками и возможностями оптимизации. Мне...

153
Разумно ли заменить boost :: thread и boost :: mutex на c ++ 11 эквивалентов?

Мотивация: причина, по которой я рассматриваю это, заключается в том, что мой гениальный руководитель проекта считает, что повышение - это еще одна зависимость, и это ужасно, потому что «вы зависите от этого» (я попытался объяснить качество повышения, а затем через некоторое время сдался :( Меньшая...

153
Что происходит с отдельным потоком при выходе из main ()?

Предположим, я запускаю a, std::threadа затем detach()it, поэтому поток продолжает выполняться, даже если тот, std::threadкоторый когда-то представлял его, выходит из области видимости. Предположим далее, что программа не имеет надежного протокола для присоединения к отсоединенному потоку 1 ,...

152
Что означает йота из std :: йота?

Я предполагаю, что «i» - это приращение, а «a» - это присваивание, но я не мог понять или найти ответ. Кроме того, он очень похож на нестандартный, itoaчто, на мой взгляд, сбивает с толку....

151
Ключевое слово C ++ auto. Почему это волшебство?

Из всего материала, который я использовал для изучения C ++, autoвсегда был странный спецификатор продолжительности хранения, который не служил никакой цели. Но совсем недавно я столкнулся с кодом, который использовал его как имя типа само по себе. Я из любопытства попробовал, и он предполагает...

148
Зачем мне std :: переместить std :: shared_ptr?

Я просматривал исходный код Clang и нашел этот фрагмент: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } Зачем мне std::moveэто std::shared_ptr? Есть ли смысл передавать право собственности на общий ресурс? Почему бы мне...

146
Что произойдет, если вы укажете static_cast недопустимое значение для перечисления класса?

Рассмотрим этот код C ++ 11: enum class Color : char { red = 0x1, yellow = 0x2 } // ... char *data = ReadFile(); Color color = static_cast<Color>(data[0]); Предположим, что data [0] на самом деле 100. Какой цвет установлен в соответствии со стандартом? В частности, если я позже сделаю switch...

146
Какова цель ключевого слова final в C ++ 11 для функций?

Какова цель finalключевого слова в C ++ 11 для функций? Я понимаю, что это предотвращает переопределение функций производными классами, но если это так, то разве недостаточно объявить ваши finalфункции не виртуальными ? Есть еще кое-что, что мне здесь не хватает?...

145
Какая логика стоит за ключевым словом «using» в C ++?

Какая логика стоит за ключевым словом «using» в C ++? Он используется в разных ситуациях, и я пытаюсь выяснить, есть ли у них что-то общее, и есть причина, по которой ключевое слово «using» используется как таковое. using namespace std; // to import namespace in the current namespace using T = int;...

143
Есть ли обратная сторона в объявлении переменных с auto в C ++?

Похоже, что это autoбыла довольно значительная особенность, которая должна быть добавлена ​​в C ++ 11, которая, кажется, следует за многими новыми языками. Как и в языке, подобном Python, я не видел явного объявления переменных (я не уверен, возможно ли это с использованием стандартов Python). Есть...

142
Какого типа лямбда-выражения выводятся с помощью «auto» в C ++ 11?

У меня было ощущение, что тип лямбда - это указатель на функцию. Когда я выполнил следующий тест, я обнаружил, что это неправильно ( демо ). #define LAMBDA [] (int i) -> long { return 0; } int main () { long (*pFptr)(int) = LAMBDA; // ok auto pAuto = LAMBDA; // ok assert(typeid(pFptr) ==...