c++11- все статьи тега ➜ страница 4


Когда следует использовать std:: move для возвращаемого значения функции? [дубликат]

этот вопрос уже есть ответ здесь: в C++11 оптимизация возвращаемого значения или двигаться? [дубликат] 4 ответы В этом случае struct Foo {}; Foo meh() { return std::move(Foo()); } я почти уверен, что этот шаг не нужен, потому что вновь созданный Foo будет xvalue. а что в таких случаях, как эти? struct Foo {}; Foo meh() { Foo foo; //do something, but knowing that foo can safely be disposed of ...

В C++, это все-таки плохая практика, чтобы вернуть вектор из функции?

короткая версия: обычно возвращают большие объекты-такие как векторы/массивы-во многих языках программирования. Является ли этот стиль теперь приемлемым в C++0x, если класс имеет конструктор перемещения, или программисты C++ считают его странным/уродливым/отвратительным? версия: в C++0x это все еще считается плохим тоном? std::vector<std::string> BuildLargeVector(); ... std::vector<std::string> v = BuildLargeVector(); традиционная версия будет выглядеть так: void BuildLargeVecto ...

Использование переменной-члена в списке захвата лямбда внутри функции-члена

следующий код компилируется с gcc 4.5.1, но не с VS2010 SP1: #include <iostream> #include <vector> #include <map> #include <utility> #include <set> #include <algorithm> using namespace std; class puzzle { vector<vector<int>> grid; map<int,set<int>> groups; public: int member_function(); }; int puzzle::member_function() { int i; for_each(groups.cbegin(),groups.cend(),[grid,&i](pair<int,se ...

Как завершить поток в C++11?

Мне не нужно правильно завершать поток или заставлять его реагировать на команду "завершить". Я заинтересован в том, чтобы принудительно завершить поток, используя чистый C++11. ...

Использование шаблона extern (C++11)

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

Когда использовать инициализатор, заключенный в скобки?

В 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}; auto d = std::complex<double>(3,4); auto e = std::complex<double>{3,4}; } { // Example 3 std::string a(3,'x'); std::string b{3,'x'}; // oops ...

Разница между std:: результат и decltype

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

Разница между спецификатором c++03 throw() C++11 noexcept

есть ли разница между throw() и noexcept помимо проверки времени выполнения и времени компиляции соответственно ? Википедия C++11 статья предполагает, что спецификаторы броска C++03 устарели. Почему так noexcept достаточно способный, чтобы покрыть все это во время компиляции ? [Примечание: я говорил этот вопрос и в этой статье, но не мог получить твердую причину осуждения.] ...

Является ли "float A = 3.0;" правильным утверждением?

если у меня есть следующее объявление: float a = 3.0 ; это ошибка? Я читал в книге, что 3.0 это double значение и что я должен определить его как float a = 3.0f. Так ли это? ...

Цикл итератора против цикла индекса [дубликат]

Возможные Дубликаты:зачем использовать итераторы вместо индексов массива? я пересматриваю свои знания на C++, и я наткнулся на итераторы. Одна вещь, я хочу знать, что делает их такими особенными, и я хочу знать, почему это: using namespace std; vector<int> myIntVector; vector<int>::iterator myIntVectorIterator; // Add some elements to myIntVector myIntVector.push_back(1); myIntVector.push_back(4); myIntVector.push_back(8); for(myIntVectorIterator = myIntVector.begin(); ...

Инициализация массива элементов в инициализаторе конструктора

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}; вопросы как я могу сделать то, что я хочу сделать (что есть инициализации массив в a конструктор (не присваивая элементы в теле.)) Это вообще возможно? стандарт C++03 говорит что-нибудь особенное об инициализ ...

Является ли цикл " for " на основе диапазона устаревшим для многих простых алгоритмов?

алгоритм решения: std::generate(numbers.begin(), numbers.end(), rand); Range-based for-loop solution: for (int& x : numbers) x = rand(); почему я хочу использовать более подробный std::generate на основе диапазона для циклов в C++11? ...

Почему функция-член const может изменять статический элемент данных?

в следующем C++ программа, модифицирующая a статический элемент данных С работает: class A { public: static int a; // static data member void set() const { a = 10; } }; но изменение a нестатический член данных С ...

Почему я не могу создать вектор лямбд (того же типа) в C++11?

Я пытался создать вектор лямбда, но не удалось: auto ignore = [&]() { return 10; }; //1 std::vector<decltype(ignore)> v; //2 v.push_back([&]() { return 100; }); //3 до строки #2, это компилирует штрафа в размере. Но строка#3 дает ошибка компиляции: ошибка: нет подходящей функции для вызова 'СТД::вектор>::push_back(основной()::)' мне не нужен вектор указателей функций или вектор объектов функций. Однако вектор объектов функций, которые инкапсулируют реальные лямбда ...

Включить поддержку C++11 на Android

Как интегрировать C++11 В Android? ...

Функция, возвращающая лямбда-выражение

интересно, можно ли написать функцию, которая возвращает лямбда-функцию в C++11. Конечно, одна проблема заключается в том, как объявить такую функцию. Каждая лямбда имеет тип, но этот тип не может быть выражен в C++. Я не думаю, что это сработает: auto retFun() -> decltype ([](int x) -> int) { return [](int x) { return x; } } ни этот: int(int) retFun(); Я не знаю никаких автоматических преобразований из лямбд в, скажем, указатели на функции или некоторые такие. Является ли единст ...

Какова логика ключевого слова "using" в C++?

какова логика ключевого слова "using" в C++? Он используется в разных ситуациях, и я пытаюсь найти если все это имеет что-то общее и есть причина почему ключевое слово" using " используется как таковое. using namespace std; // to import namespace in the current namespace using T = int; // type alias using SuperClass::X; // using super class methods in derived class ...

cc1plus: ошибка: нераспознанный параметр командной строки "- std=c++11 " с g++

Я пытаюсь скомпилировать с помощью g++ и -std=c++11 или c++0x флаги. однако, я получаю эту ошибку cc1plus: error: unrecognized command line option "-std=c++11" g++ --version g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ...

Почему Летучий квалификатор используется через out std:: atomic?

из того что я читал от Херб Саттер и другие можно подумать, что volatile и параллельное программирование были полностью ортогональными понятиями, по крайней мере, в том, что касается C/C++. однако, в GCC реализация все std::atomic функции-члены имеют volatile квалификатор. То же самое верно и в Энтони Уильямсе реализация на std::atomic. так в чем дело, у меня atomic<> переменные должны быть volatile или нет? ...

Как сохранить шаблон с переменным числом аргументов аргументы?

можно ли как-то сохранить пакет параметров для последующего использования? template <typename... T> class Action { private: std::function<void(T...)> f; T... args; // <--- something like this public: Action(std::function<void(T...)> f, T... args) : f(f), args(args) {} void act(){ f(args); // <--- such that this will be possible } } позже: void main(){ Action<int,int> add([](int x, int y){std::cout << (x+y);}, 3, 4) ...