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

174
Что такое std :: atomic?

Я понимаю, что std::atomic<>это атомный объект. Но в какой степени? Насколько я понимаю, операция может быть атомарной. Что именно означает сделать объект атомарным? Например, если два потока одновременно выполняют следующий код: a = a + 12; Тогда вся операция (скажем add_twelve_to(int))...

172
shared_ptr для массива: его следует использовать?

Просто небольшой вопрос по поводу shared_ptr. Это хорошая практика, чтобы использовать shared_ptrуказание на массив? Например, shared_ptr<int> sp(new int[10]); Если нет, то почему? Одна причина, о которой я уже знаю, это то, что нельзя увеличивать / уменьшать shared_ptr. Следовательно, его...

171
Почему лямбды могут быть лучше оптимизированы компилятором, чем обычные функции?

В своей книге The C++ Standard Library (Second Edition)Николай Йосуттис утверждает, что компилятор может оптимизировать лямбды лучше, чем простые функции. Кроме того, компиляторы C ++ оптимизируют лямбда-выражения лучше, чем обычные функции. (Стр. 213) Это почему? Я думал, что когда дело доходит до...

170
С ++ 11, 14, 17 или 20 вводит стандартную константу для пи?

Существует довольно глупая проблема с числом пи в C и C ++. Насколько я знаю, M_PIопределено в math.hне требуется ни одного стандарта. Новые стандарты C ++ ввел много сложных математических в стандартной библиотеке - гиперболических функций, std::hermiteи std::cyl_bessel_i, различных генераторов...

170
Как я могу надежно получить адрес объекта, когда оператор & перегружен?

Рассмотрим следующую программу: struct ghost { // ghosts like to pretend that they don't exist ghost* operator&() const volatile { return 0; } }; int main() { ghost clyde; ghost* clydes_address = &clyde; // darn; that's not clyde's address :'( } Как я могу получить clydeадрес? Я ищу...

170
Использование универсальных объектов std :: function с функциями-членами в одном классе

Для одного класса я хочу сохранить несколько указателей на функции-члены одного класса в одном mapобъекте хранения std::function. Но я терплю неудачу в самом начале с этим кодом: class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f =...

169
функция обмена друзей

В прекрасном ответе на идиому copy-and-swap- a есть фрагмент кода, который мне нужно немного помочь: class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow { using std::swap; swap(first.mSize, second.mSize); swap(first.mArray, second.mArray); }...

169
Чем «= default» отличается от «{}» для конструктора и деструктора по умолчанию?

Я первоначально разместил это как вопрос только о деструкторах, но теперь я добавляю рассмотрение конструктора по умолчанию. Вот оригинальный вопрос: Если я хочу дать моему классу деструктор, который является виртуальным, но в остальном такой же, как и тот, который генерирует компилятор, я могу...

168
Что auto && говорит нам?

Если вы читаете код, как auto&& var = foo(); где fooлюбая функция, возвращаемая по значению типа T. Тогда varlvalue типа rvalue ссылается на T. Но для чего это нужно var? Значит ли это, что нам разрешено воровать ресурсы var? Существуют ли разумные ситуации, когда вы должны использовать,...

167
Как включить C ++ 11 в Qt Creator?

Название довольно информативно. Я скачал Qt Creator 2.7.0 и пытаюсь скомпилировать базовый код C ++ 11: int my_array[5] = {1, 2, 3, 4, 5}; for(int &x : my_array) { x *= 2; } Я получаю следующую ошибку: range based for loops are not allowed in c++ 98 mode Тем не менее, согласно этой статье, эта...

166
Лямбда-захват как постоянная ссылка?

Можно ли захватить константной ссылкой в ​​лямбда-выражении? Я хочу, чтобы назначение, отмеченное ниже, не сработало, например: #include <cstdlib> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { string strings[] = { "hello", "world"...

165
Почему я должен избегать std :: enable_if в сигнатурах функций

Скотт Мейерс опубликовал содержание и статус своей следующей книги EC ++ 11. Он написал, что один пункт в книге может быть «Избегайте std::enable_ifподписей функций» . std::enable_if может использоваться в качестве аргумента функции, в качестве возвращаемого типа или в качестве шаблона класса или...

164
Могут ли виртуальные функции иметь параметры по умолчанию?

Если я объявляю базовый класс (или интерфейсный класс) и указываю значение по умолчанию для одного или нескольких его параметров, должны ли производные классы указывать те же значения по умолчанию, а если нет, то какие значения по умолчанию будут проявляться в производных классах? Приложение: меня...

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
Каковы преимущества использования nullptr?

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

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

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

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

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