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

255
«Распаковка» кортежа для вызова соответствующего указателя на функцию

Я пытаюсь сохранить в std::tupleразличном количестве значений, которые позже будут использоваться в качестве аргументов для вызова указателя функции, который соответствует сохраненным типам. Я создал упрощенный пример, показывающий проблему, которую я пытаюсь решить: #include <iostream>...

252
Как заставить мой пользовательский тип работать с «петлями на основе диапазона»?

Как и многие люди в наши дни, я пробовал разные функции, которые дает C ++ 11. Один из моих любимых - «петли на основе диапазона». Я это понимаю: for(Type& v : a) { ... } Эквивалентно: for(auto iv = begin(a); iv != end(a); ++iv) { Type& v = *iv; ... } И это begin()просто возвращается...

248
Нужно ли std :: unique_ptr <T> знать полное определение T?

У меня есть код в заголовке, который выглядит следующим образом: #include <memory> class Thing; class MyClass { std::unique_ptr< Thing > my_thing; }; Если я включаю этот заголовок в cpp, который не включает Thingопределение типа, то он не компилируется под VS2010-SP1: 1> C: \ Program...

245
to_string не является членом std, говорит g ++ (mingw)

Я делаю небольшую программу для запоминания словарного запаса, в которой слова будут мелькать на меня случайно для значений. Я хочу использовать стандартную библиотеку C ++, как говорит нам Бьярно Страуструп, но я столкнулся с на первый взгляд странной проблемой прямо за воротами. Я хочу изменить...

238
Что такое «rvalue reference для * this»?

На странице статуса C ++ 11 в Clang наткнулся на предложение под названием «ссылка на rvalue для * this» . Я прочитал довольно много о ссылках на rvalue и понял их, но я не думаю, что знаю об этом. Я также не мог найти много ресурсов в Интернете, используя термины. На странице есть ссылка на...

235
std :: vector регрессия производительности при включении C ++ 11

Я обнаружил интересную регрессию производительности в небольшом фрагменте C ++ при включении C ++ 11: #include <vector> struct Item { int a; int b; }; int main() { const std::size_t num_items = 10000000; std::vector<Item> container; container.reserve(num_items); for (std::size_t i = 0;...

232
Зачем мне использовать push_back вместо emplace_back?

С ++ 11 векторов имеют новую функцию emplace_back. В отличие от этого push_back, который полагается на оптимизацию компилятора во избежание копирования, emplace_backиспользует идеальную пересылку для отправки аргументов непосредственно в конструктор для создания объекта на месте. Мне кажется, что...

230
Могут ли лямбда-функции быть шаблонными?

В C ++ 11 есть ли способ шаблона лямбда-функции? Или это слишком специфично для шаблонов? Я понимаю, что вместо этого я могу определить классический шаблонный класс / функтор, но вопрос больше похож на: позволяет ли язык шаблонизировать...

230
Может ли использование C ++ 11 'auto' улучшить производительность?

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

228
Какой тип указателя мне использовать, когда?

Итак, в прошлый раз, когда я писал на С ++, std::auto_ptrвсе, что было доступно в std lib, boost::shared_ptrбыло в ярости. Я действительно никогда не смотрел на другие типы улучшенных умных указателей. Я понимаю, что C ++ 11 теперь предоставляет некоторые из типов boost, но не все. Так есть ли у...

227
Какие критические изменения введены в C ++ 11?

Я знаю, что, по крайней мере, одно из изменений в C ++ 11, которое приведет к тому, что старый код перестанет компилироваться: введение explicit operator bool()в стандартную библиотеку, замена старых экземпляров operator void*(). Конечно, код, который это нарушит, - это, вероятно, код, который в...

227
Является ли ключевое слово override просто проверкой переопределенного виртуального метода?

Насколько я понимаю, введение overrideключевого слова в C ++ 11 является не чем иным, как проверкой, чтобы убедиться, что реализуемая функция overrideявляется virtualфункцией функции в базовом классе. Это...

218
Сколько это слишком много с ключевым словом auto C ++ 11?

Я использовал новое autoключевое слово, доступное в стандарте C ++ 11 для сложных шаблонных типов, для которого, как мне кажется, оно было разработано. Но я также использую его для таких вещей, как: auto foo = std::make_shared<Foo>(); И более скептически для: auto foo = bla(); // where bla()...

216
make_unique и идеальная пересылка

Почему std::make_uniqueв стандартной библиотеке C ++ 11 нет шаблона функции? я нахожу std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); немного многословно Разве следующее не будет намного лучше? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); Это...

215
Цикл C ++ 11 на основе диапазона: получить элемент по значению или ссылку на const

Читая некоторые примеры циклов на основе диапазона, они предлагают два основных способа 1 , 2 , 3 , 4 std::vector<MyClass> vec; for (auto &x : vec) { // x is a reference to an item of vec // We can change vec's items by changing x } или for (auto x : vec) { // Value of x is copied from an...