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

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

2
Реализация лямбда-выражения C ++ 11 и модель памяти
Мне хотелось бы получить некоторую информацию о том, как правильно думать о замыканиях std::functionв C ++ 11, о том, как они реализованы и как обрабатывается память. Хотя я не верю в преждевременную оптимизацию, у меня есть привычка тщательно учитывать влияние моего выбора на производительность при написании нового кода. Я также …
97 c++  memory  lambda  c++11 

7
Как передать std :: unique_ptr в функцию
Как передать std::unique_ptrв функцию? Допустим, у меня есть следующий класс: class A { public: A(int val) { _val = val; } int GetVal() { return _val; } private: int _val; }; Следующее не компилируется: void MyFunc(unique_ptr<A> arg) { cout << arg->GetVal() << endl; } int main(int argc, char* argv[]) { …
97 c++  c++11  unique-ptr 

3
В чем разница между концепциями и ограничениями шаблона?
Я хочу знать, каковы семантические различия между предложением полных концепций C ++ и ограничениями шаблона (например, ограничениями, появившимися в Dlang, или предложением нового облегченного концепта для C ++ 1y ). На что способны полноценные концепции, которых не могут сделать ограничения шаблона?
96 c++  c++11  d  c++-concepts 

3
Почему нет std :: stou?
В C ++ 11 добавлены новые функции преобразования строк: http://en.cppreference.com/w/cpp/string/basic_string/stoul Он включает в себя stoi (строка в int), stol (строка в long), stoll (строка в long long), stoul (строка в long без знака), stoull (строка в long без знака). Примечательна его отсутствием функция stou (преобразование строки в беззнаковый). Есть ли …
96 c++  string  c++11  std 

6
Почему std :: initializer_list не является встроенным языком?
Почему не std::initializer_listвстроен базовый язык? Мне кажется, что это довольно важная особенность C ++ 11, но у него нет собственного зарезервированного ключевого слова (или чего-то подобного). Вместо этого initializer_listэто просто класс шаблона из стандартной библиотеки, который имеет специальное неявное сопоставление из нового списка инициализации в фигурных скобках. {...} синтаксиса скобках, …

5
Могу ли я инициализировать список векторов типа «только перемещение»?
Если я пропущу следующий код через мой снимок GCC 4.7, он попытается скопировать unique_ptrs в вектор. #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(), move_only() }; } Очевидно, это не может работать, потому что std::unique_ptrне копируется: ошибка: использование удаленной функции 'std :: …


2
Имеет ли этот код из раздела 36.3.6 4-го издания «Язык программирования C ++» четко определенное поведение?
В разделе « Операции, подобные STL» Бьярна Страуструпа The C ++ Programming Language 4th edition, в качестве примера цепочки используется следующий код :36.3.6 void f2() { std::string s = "but I have heard it works even if you don't believe in it" ; s.replace(0, 4, "" ).replace( s.find( "even" ), …


2
Что означает [=] в C ++?
Я хочу знать, что [=]делает? Вот небольшой пример template <typename T> std::function<T (T)> makeConverter(T factor, T offset) { return [=] (T input) -> T { return (offset + input) * factor; }; } auto milesToKm = makeConverter(1.60936, 0.0); Как будет работать код []вместо [=]? Я предполагаю что std::function<T (T)> означает …
94 c++  c++11  lambda 

8
Лямбда C ++ с захватами в качестве указателя на функцию
Я играл с лямбдами C ++ и их неявным преобразованием в указатели на функции. В моем начальном примере они использовались в качестве обратного вызова для функции ftw. Это работает, как ожидалось. #include <ftw.h> #include <iostream> using namespace std; int main() { auto callback = [](const char *fpath, const struct stat …

6
Вычисление длины строки C во время компиляции. Это действительно constexpr?
Я пытаюсь вычислить длину строкового литерала во время компиляции. Для этого я использую следующий код: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } Все работает как положено, программа выводит 4 и …

1
Устранение неоднозначной перегрузки указателя функции и std :: function для лямбда с помощью +
В следующем коде первый вызов fooнеоднозначен и поэтому не может быть скомпилирован. Второй, с добавленным +перед лямбдой, разрешает перегрузку указателя функции. #include <functional> void foo(std::function<void()> f) { f(); } void foo(void (*f)()) { f(); } int main () { foo( [](){} ); // ambiguous foo( +[](){} ); // not ambiguous …

8
Почему макросы препроцессора - зло и каковы альтернативы?
Я всегда спрашивал об этом, но никогда не получал действительно хорошего ответа; Я думаю, что почти любой программист, даже до написания первого «Hello World», сталкивался с такими фразами, как «макрос никогда не должен использоваться», «макросы - это зло» и так далее. У меня вопрос: почему? Есть ли реальная альтернатива новому …

4
Как получить продолжительность в виде int milli и float секунд из <chrono>?
Я пытаюсь использовать библиотеку хронографов для таймеров и продолжительности. Я хочу иметь Duration frameStart;(при запуске приложения) и Duration frameDelta;(время между кадрами) Мне нужно получить frameDeltaпродолжительность в миллисекундах и секундах с плавающей запятой. Как вы это делаете с новыми &lt;chrono&gt;библиотеками C ++ 11 ? Я работал над этим и гуглил (информация …
94 c++  c++11  timer  chrono 

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