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

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

2
Разница между std :: result_of и decltype
У меня проблемы с пониманием необходимости std::result_ofв C ++ 0x. Если я правильно понял, result_ofиспользуется для получения результирующего типа вызова объекта функции с определенными типами параметров. Например: template <typename F, typename Arg> typename std::result_of<F(Arg)>::type invoke(F f, Arg a) { return f(a); } Я не вижу разницы в следующем коде: template …
100 c++  c++11  decltype  result-of 


13
Функция Sequence-zip для с ++ 11?
С новым циклом for на основе диапазона мы можем писать такой код, как for(auto x: Y) {} Какой IMO является огромным улучшением (например) for(std::vector<int>::iterator x=Y.begin(); x!=Y.end(); ++x) {} Можно ли использовать его для перебора двух одновременных циклов, например zipфункции Pythons ? Для тех, кто не знаком с Python, код: Y1 …
100 c++  c++11  sequences 

6
Инициализация массива членов в инициализаторе конструктора
class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; }; Я считаю, что причина в том, что массивы можно инициализировать только с помощью = синтаксиса, а именно: int arr[3] = {1,3,4}; Вопросы Как я могу делать то, …

4
Как реализован std :: function?
Согласно источникам, которые я нашел, лямбда-выражение по существу реализуется компилятором, создающим класс с перегруженным оператором вызова функции и ссылочными переменными в качестве членов. Это говорит о том, что размер лямбда-выражений варьируется, и при наличии достаточного количества ссылочных переменных размер может быть сколь угодно большим . Объект std::functionдолжен иметь фиксированный размер …
99 c++  c++11  lambda 

3
Как правильно проверить, пусто ли std :: function в C ++ 11?
Мне было интересно, как правильно проверить std::function, пуст ли. Рассмотрим этот пример: class Test { std::function<void(int a)> eventFunc; void registerEvent(std::function<void(int a)> e) { eventFunc = e; } void doSomething() { ... eventFunc(42); } }; Этот код отлично компилируется в MSVC, но если я позвоню doSomething()без инициализации, eventFuncкод явно выйдет из …

4
Почему мы копируем, а затем перемещаем?
Я где-то видел код, в котором кто-то решил скопировать объект и впоследствии переместить его в член данных класса. Это привело меня в замешательство, поскольку я думал, что весь смысл перемещения заключается в том, чтобы избежать копирования. Вот пример: struct S { S(std::string str) : data(std::move(str)) {} }; Вот мои вопросы: …

2
Каковы правила для токена «…» в контексте вариативных шаблонов?
В C ++ 11 есть вариативные шаблоны, подобные этому: template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); } В этом есть некоторые любопытства: выражение std::forward<Args>(args)...использует оба Argsи, argsно только один ...токен. Кроме того std::forward, это невариная шаблонная функция, принимающая только один параметр шаблона …

12
Удаление элемента из вектора, находясь в диапазоне С ++ 11 для цикла?
У меня есть вектор IInventory *, и я просматриваю список, используя диапазон C ++ 11 для работы с каждым из них. Проделав кое-что с одним, я могу удалить его из списка и удалить объект. Я знаю, что могу вызвать deleteуказатель в любое время, чтобы очистить его, но как правильно удалить …
98 c++  vector  for-loop  c++11 

4
Реализация операторов сравнения через «кортеж» и «галстук» - хорошая идея?
(Примечание: tupleи tieможет быть взято из Boost или C ++ 11.) При написании небольших структур только с двумя элементами я иногда склоняюсь к выбору a std::pair, поскольку все важные вещи уже сделаны для этого типа данных, например, operator<для строгого-слабого упорядочения . Минусами являются бесполезные имена переменных. Даже если бы я …

8
initializer_list и семантика перемещения
Могу ли я перемещать элементы из std::initializer_list<T>? #include <initializer_list> #include <utility> template<typename T> void foo(std::initializer_list<T> list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } Поскольку std::intializer_list<T>требует особого внимания компилятора и не имеет семантики значений, как обычные контейнеры стандартной библиотеки C ++, я …

1
Инициализация члена при использовании делегированного конструктора
Я начал пробовать стандарт C ++ 11 и нашел этот вопрос, который описывает, как вызвать ваш ctor из другого ctor в том же классе, чтобы избежать использования метода инициализации и т.п. Теперь я пробую то же самое с кодом, который выглядит следующим образом: hpp: class Tokenizer { public: Tokenizer(); Tokenizer(std::stringstream …

6
Современный способ фильтровать контейнер STL?
Возвращаясь к C ++ после многих лет работы с C #, мне было интересно, каким будет современный - читайте: C ++ 11 - способ фильтрации массива, то есть как мы можем достичь чего-то похожего на этот запрос Linq: var filteredElements = elements.Where(elm => elm.filterProperty == true); Чтобы отфильтровать вектор элементов …
98 c++  c++11  stl 

4
Разница между std :: system_clock и std :: stable_clock?
В чем разница между std::system_clockи std::steady_clock? (Примерный случай, иллюстрирующий разные результаты / поведение, был бы отличным). Если моя цель - точно измерить время выполнения функций (например, эталонный тест), что будет лучшим выбором между std::system_clock, std::steady_clockи std::high_resolution_clock?
97 c++  c++11  timer  chrono 

3
Когда использовать инициализатор в фигурных скобках?
В C ++ 11 у нас есть новый синтаксис для инициализации классов, который дает нам большое количество возможностей для инициализации переменных. { // Example 1 int b(1); int a{1}; int c = 1; int d = {1}; } { // Example 2 std::complex<double> b(3,4); std::complex<double> a{3,4}; std::complex<double> c = {3,4}; …

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