c++11- все статьи тега ➜ страница 3
Запустить поток с функцией-членом
Я пытаюсь построить std::thread С функцией-членом, которая не принимает аргументов и возвращает void. Я не могу понять, какой синтаксис работает - компилятор жалуется, несмотря ни на что. Как правильно реализовать spawn() Так что он возвращает std::thread выполняет test()? #include <thread> class blub { void test() { } public: std::thread spawn() { return { test }; } }; ...
Какой указатель я использую, когда?
хорошо, так что в последний раз, когда я писал C++ для жизни,std::auto_ptr все СТД Либ был доступен, и boost::shared_ptr был весь гнев. Я никогда не заглядывал в другие типы интеллектуальных указателей, предоставляемые boost. Я понимаю, что C++11 теперь предоставляет некоторые из типов boost, но не все из них. Итак, у кого-то есть простой алгоритм, чтобы определить, когда использовать какой умный указатель? Предпочтительно включая советы относительно тупых указателей (необработанные указатели, ...
Почему лямбда-код C++11 по умолчанию требует "изменяемого" ключевого слова для захвата по значению?
короткий пример: #include <iostream> int main() { int n; [&](){n = 10;}(); // OK [=]() mutable {n = 20;}(); // OK // [=](){n = 10;}(); // Error: a by-value capture cannot be modified in a non-mutable lambda std::cout << n << "n"; // "10" } вопрос: Зачем нам нужен mutable ключевое слово? Это сильно отличается от традиционной передачи параметров в именованных функций. В чем причина этого? у меня создалось впечатление, чт ...
Сколько стоит слишком много с ключевым словом C++11 auto?
я использую новый auto ключевое слово, доступное в стандарте C++11 для сложных шаблонных типов, для которых, как я считаю, он был разработан. Но я также использую его для таких вещей, как: auto foo = std::make_shared<Foo>(); и более скептически на: auto foo = bla(); // where bla() return a shared_ptr<Foo> Я не видел много дискуссий на эту тему. Кажется, что auto может быть перегружен, так как тип часто является формой документации и проверки. Где вы проводите линию с помощью au ...
Какие идиомы C++ устарели в C++11?
с новым стандартом есть новые способы делать вещи, и многие из них лучше, чем старые способы, но старый способ все еще прекрасен. Также ясно, что новый стандарт официально не очень устарел по причинам обратной совместимости. Так что вопрос остается: какие старые способы кодирования определенно уступают стилям C++11, и что мы теперь можем сделать вместо этого? отвечая на это, вы можете пропустить такие очевидные вещи как "авто переменные параметры." ...
Есть ли польза для уникального ptr с массивом?
std::unique_ptr имеет поддержку массивов, например: std::unique_ptr<int[]> p(new int[10]); но нужно ли это? наверное, им удобнее пользоваться std::vector или std::array. вы находите какое-либо применение для этой конструкции? ...
Могут ли лямбда-функции быть шаблонными?
В C++11, есть ли способ шаблона лямбда-функции? Или это по своей сути слишком специфично, чтобы быть шаблонизированным? Я понимаю, что вместо этого я могу определить классический шаблонный класс/функтор, но вопрос больше похож: позволяет ли язык шаблонизировать лямбда-функции? ...
Зачем использовать функции begin и end, не являющиеся членами, в C++11?
каждый стандартный контейнер имеет begin и end метод возврата итераторов для этого контейнера. Однако C++11, по-видимому, ввел свободные функции под названием std::begin и std::end, которую называют begin и end функции-члены. Итак, вместо того, чтобы писать auto i = v.begin(); auto e = v.end(); ты бы написал using std::begin; using std::end; auto i = begin(v); auto e = end(v); в своем выступлении, Написание Современного C++, Херб Саттер говорит, что вы всегда должны использовать бесплатный ...
Оптимизация a "while(1);" в C++0x
обновление, см. ниже! Я слышал и читал, что C++0x позволяет компилятору печатать "Hello" для следующего фрагмента #include <iostream> int main() { while(1) ; std::cout << "Hello" << std::endl; } это, по-видимому, имеет какое-то отношение к потокам и возможностям оптимизации. Мне кажется, что это может удивить многих людей. есть ли у кого-то хорошее объяснение, почему это было необходимо разрешить? Для справки, самый последний проект C++0x говорит в 6.5/5 цик ...
В чем разница между std:: move и std:: forward
Я видел это здесь: Конструктор перемещения вызов базового класса конструктор перемещения может кто-нибудь объяснить: разницу между std::move и std::forward, желательно с примерами кода? как думать об этом легко, а когда следует использовать ...
Эффективный C++ все еще эффективны?
из того, что я увидел в этом посте я решила начать чтение книги Эффективный C++. но теперь, когда есть много новых функций из-за C++11 и что некоторые из лучших практик изменились, я не уверен, действительно ли это хорошая идея. Является ли появление C++11 устаревшим каким-либо советом, содержащимся в эффективном C++? Если да, то каких тем следует избегать? ...
Выбор между использованием std::map и std::неупорядоченный карте
теперь std имеет реальную хэш-карту в unordered_map, почему (или когда) я все еще хочу использовать старый добрый map over unordered_map в системах, где он существует? Есть ли очевидные ситуации, которые я не могу сразу увидеть? ...
Что происходит с отсоединенным потоком при выходе main ()?
предположим, что я начинаю std::thread а то detach() это, так что поток продолжает выполняться, даже если std::thread то, что когда-то представляло его, выходит за рамки. предположим далее, что программа не имеет надежного протокола для вступления в отдельной теме1, поэтому отсоединенный поток все еще работает, когда main() выход. Я не могу найти ничего в стандарте (точнее, в проекте N3797 C++14), который описывает, что должно произойти, ни 1.10, ни 30.3 не содержат соответствующей формулировк ...
Использование универсальных объектов std:: function с функциями-членами в одном классе
для одного класса я хочу сохранить некоторые указатели на функции-члены одного класса в одном map хранение std::function объекты. Но я терплю неудачу в самом начале с этим кодом: class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } }; я получил error C2064: term does not evaluate to a function taking 0 arguments на xxcallobj в сочетании с некоторыми странными ош ...
Какова цель ключевого слова "final" В C++11 для функций?
какова цель final ключевое слово в C++11 функций? Я понимаю, что это предотвращает переопределение функций производными классами, но если это так, то разве недостаточно объявить как невиртуальный ваш final функции? Есть ли еще что-то, что я упускаю здесь? ...
неопределенная ссылка на 'std:: cout'
это пример: #include <iostream> using namespace std; int main() { cout << "Hola, moondo.n"; } Он выдает ошибку: gcc -c main.cpp gcc -o edit main.o main.o: In function `main': main.cpp:(.text+0xa): undefined reference to `std::cout' main.cpp:(.text+0xf): undefined reference to `std::basic_ostream<char,std::char_traits<char> >& std::operator<< <std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char> >&, char co ...
Как я могу избежать циклов "for" с условием " if " внутри них с помощью C++?
почти со всем кодом, который я пишу, я часто имею дело с проблемами сокращения набора в коллекциях, которые в конечном итоге заканчиваются наивными условиями "если" внутри них. Вот простой пример: for(int i=0; i<myCollection.size(); i++) { if (myCollection[i] == SOMETHING) { DoStuff(); } } с функциональными языками я могу решить проблему, уменьшив коллекцию до другой коллекции (легко), а затем выполнить все операции над моим уменьшенным набором. В псевдокоде: new ...
Как правильно передать параметры?
Я новичок в C++, но не новичок в программировании. Я пытаюсь изучить C++(c++11), и для меня непонятно самое главное: передача параметров. Я рассмотрел эти простые примеры: класс, который имеет все его члены примитивные типы:CreditCard(std::string number, int expMonth, int expYear,int pin):number(number), expMonth(expMonth), expYear(expYear), pin(pin) класс, который имеет в качестве членов примитивные типы + 1 сложный тип:Account(std::string number, float amount, CreditCard creditCard) : numbe ...
Рекурсивные лямбда-функции в C++11
Я новичок в C++11. Я пишу следующую рекурсивную лямбда-функцию, но она не компилируется. сумма.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 b)mutable ->int { if(a>b) return 0; else return term(a) + sum(next(a),b); }; int main(){ std::cout<<sum(1,10)<<std::endl; return 0; } ошибка компиляции: Вимал@Лину ...
Новое ключевое слово =по умолчанию в C++11
Я не понимаю, зачем мне вообще это делать: struct S { int a; S(int aa) : a(aa) {} S() = default; }; почему бы просто не сказать: S() {} // instead of S() = default; зачем вводить новое ключевое слово для этого? ...