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

Используйте этот тег для кода, который должен компилироваться как C ++ 11 (без использования каких-либо функций, представленных в C ++ 14 или более поздних версиях).

5
с использованием шаблона extern (C ++ 11)
Рисунок 1: шаблоны функций TemplHeader.h template<typename T> void f(); TemplCpp.cpp template<typename T> void f(){ //... } //explicit instantation template void f<T>(); main.cpp #include "TemplHeader.h" extern template void f<T>(); //is this correct? int main() { f<char>(); return 0; } Это правильный способ использования extern template, или я использую это ключевое слово …
116 c++  templates  c++11  extern 


4
Как избежать оператора if внутри цикла for?
У меня есть класс Writerс такой функцией writeVector: void Drawer::writeVector(vector<T> vec, bool index=true) { for (unsigned int i = 0; i < vec.size(); i++) { if (index) { cout << i << "\t"; } cout << vec[i] << "\n"; } } Я стараюсь не дублировать код, но при этом беспокоюсь …


3
В чем преимущество использования ссылок пересылки в циклах for на основе диапазона?
const auto&было бы достаточно, если я хочу выполнять операции только для чтения. Однако я наткнулся на for (auto&& e : v) // v is non-const пару раз за последнее время. Это заставляет меня задуматься: Возможно ли, что в некоторых непонятных угловых случаях есть некоторое преимущество в производительности при использовании ссылок …

1
Как можно вызвать std :: forward для всех аргументов в вариативной функции?
Я просто писал универсальную объектную фабрику и использовал мета-библиотеку препроцессора boost для создания вариативного шаблона (с использованием 2010, а он их не поддерживает). Моя функция использует ссылки rval иstd::forward выполняет идеальную пересылку, и это заставило меня задуматься ... когда выйдет C ++ 0X и у меня будет стандартный компилятор, я …

2
Предполагается ли комитетом по стандартам C ++, что в C ++ 11 unordered_map уничтожает то, что вставляет?
Я только что потерял три дня своей жизни, отслеживая очень странную ошибку, когда unordered_map :: insert () уничтожает вставленную вами переменную. Это крайне неочевидное поведение наблюдается только в самых последних компиляторах: я обнаружил, что clang 3.2–3.4 и GCC 4.8 - единственные компиляторы, демонстрирующие эту «особенность». Вот небольшой сокращенный код из …
114 c++  gcc  c++11  clang  standards 


9
Какой лучший способ перебрать два или более контейнеров одновременно
C ++ 11 предоставляет несколько способов перебора контейнеров. Например: Цикл на основе диапазона for(auto c : container) fun(c) std :: for_each for_each(container.begin(),container.end(),fun) Однако каков рекомендуемый способ перебора двух (или более) контейнеров одинакового размера для выполнения чего-то вроде: for(unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = containerB[i]; }

20
Как вы можете перебирать элементы std :: tuple?
Как я могу перебирать кортеж (используя C ++ 11)? Я пробовал следующее: for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); но это не работает: Ошибка 1: извините, не реализовано: невозможно развернуть "Listener ..." в список аргументов фиксированной длины. Ошибка 2: я не могу появиться в постоянном выражении. Итак, как мне правильно перебирать элементы …

8
Как кратко, портативно и тщательно засеять ГПСЧ mt19937?
Кажется, я вижу много ответов, в которых кто-то предлагает использовать <random>для генерации случайных чисел, обычно вместе с таким кодом: std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(0, 5); dis(gen); Обычно это заменяет какую-то «нечестивую мерзость» типа: srand(time(NULL)); rand()%6; Мы могли бы критиковать старый способ, утверждая, что он time(NULL)обеспечивает низкую энтропию, time(NULL)предсказуемость и …
113 c++  c++11  random 

6
Почему мы можем использовать std :: move для объекта const?
В C ++ 11 мы можем написать такой код: struct Cat { Cat(){} }; const Cat cat; std::move(cat); //this is valid in C++11 когда я звоню std::move, это означает, что я хочу переместить объект, т.е. я изменю объект. Перемещать constобъект нецелесообразно, так почему бы std::moveне ограничить такое поведение? В будущем …
113 c++  c++11 

4
Cout синхронизирован / потокобезопасен?
В общем, я предполагаю, что потоки не синхронизируются, пользователь должен выполнить соответствующую блокировку. Однако есть ли coutособая обработка в стандартной библиотеке? То есть, если несколько потоков пишут, coutмогут ли они повредить coutобъект? Я понимаю, что даже при синхронизации вы все равно получите произвольно чередующийся вывод, но гарантировано ли это чередование. …
112 c++  gcc  c++11 

4
Можно ли преобразовать класс перечисления в базовый тип?
Есть ли способ преобразовать enum classполе в базовый тип? Я думал, что это будет автоматически, но, видимо, нет. enum class my_fields : unsigned { field = 1 }; unsigned a = my_fields::field; Это задание отклоняется GCC. error: cannot convert 'my_fields' to 'unsigned int' in assignment.
112 c++  c++11 

13
Как с помощью C ++ избежать циклов for с условием «if» внутри них?
Почти со всем кодом, который я пишу, я часто сталкиваюсь с проблемами сокращения наборов в коллекциях, которые в конечном итоге заканчиваются наивными условиями «если» внутри них. Вот простой пример: for(int i=0; i<myCollection.size(); i++) { if (myCollection[i] == SOMETHING) { DoStuff(); } } С функциональными языками я могу решить проблему, уменьшив …
111 c++  c++11  c++14 

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