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

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


2
Является ли #pragma когда-то частью стандарта C ++ 11?
Традиционно стандартным и переносимым способом избежать включения нескольких заголовков в C ++ было использование #ifndef - #define - #endifсхемы директив предварительного компилятора, также называемой схемой защиты от макросов (см. Фрагмент кода ниже). #ifndef MY_HEADER_HPP #define MY_HEADER_HPP ... #endif Однако в большинстве реализаций / компиляторов (см. Рисунок ниже) существует более «элегантная» …


2
Что я могу сделать с перемещенным объектом?
Определяет ли стандарт точно, что я могу делать с объектом после его перемещения? Раньше я думал, что все, что вы можете сделать с перемещенным объектом, - это уничтожить его, но этого было бы недостаточно. Например, возьмите шаблон swapфункции, определенный в стандартной библиотеке: template <typename T> void swap(T& a, T& b) …

5
Когда я должен использовать std :: thread :: detach?
Иногда я должен использовать std::threadдля ускорения моего приложения. Я также знаю, join()ждет, пока поток не завершится. Это легко понять, но в чем разница между звонком detach()и не звонком? Я думал, что без detach(), метод потока будет работать с использованием потока независимо. Не отрываясь: void Someclass::Somefunction() { //... std::thread t([ ] …
140 c++  c++11  stdthread 

12
Какие новые возможности добавляют в C ++ определяемые пользователем литералы?
C ++ 11 вводит определяемые пользователем литералы , которые позволят введение нового буквального синтаксиса на основе существующих литералов ( int, hex, string, float) , так что любой тип будет иметь возможность буквального представления. Примеры: // imaginary numbers std::complex<long double> operator "" _i(long double d) // cooked form { return std::complex<long …

3
Эффективный C ++ по-прежнему эффективен?
Из того, что я увидел в этом посте, я решил начать читать книгу « Эффективный C ++» . Но теперь, когда появилось много новых функций из-за C ++ 11 и изменились некоторые передовые практики, я не уверен, действительно ли это хорошая идея. С появлением C ++ 11 устарели какие-либо советы, …

9
Есть ли причина, по которой && и || перегружены? не закорачивайте?
Короткое замыкание поведение операторов &&и ||удивительный инструмент для программистов. Но почему они теряют это поведение при перегрузке? Я понимаю, что операторы - это просто синтаксический сахар для функций, но операторы для boolимеют такое поведение, почему оно должно быть ограничено этим единственным типом? Есть ли за этим какие-то технические доводы?

10
Как эмулировать поведение инициализации массива C «int arr [] = {e1, e2, e3,…}» с помощью std :: array?
(Примечание: этот вопрос касается того, что не нужно указывать количество элементов и по-прежнему разрешать непосредственную инициализацию вложенных типов.) В этом вопросе обсуждаются варианты использования, оставленные для массива C, например int arr[20];. В своем ответе @James Kanze показывает один из последних оплотов массивов C, его уникальные характеристики инициализации: int arr[] = …

15
Удобное объявление строк времени компиляции в C ++
Возможность создавать строки и управлять ими во время компиляции в C ++ имеет несколько полезных приложений. Хотя в C ++ можно создавать строки во время компиляции, этот процесс очень громоздкий, поскольку строку необходимо объявить как последовательность символов с переменным числом аргументов, например using str = sequence<'H', 'e', 'l', 'l', 'o', …

5
Как завершить поток в C ++ 11?
Мне не нужно правильно завершать поток или заставлять его отвечать на команду «завершить». Я заинтересован в принудительном завершении потока с использованием чистого C ++ 11.

13
Как развернуть кортеж в аргументы функции шаблона переменной?
Рассмотрим случай шаблонной функции с переменными аргументами шаблона: template<typename Tret, typename... T> Tret func(const T&... t); Теперь у меня есть кортеж tзначений. Как мне вызвать, func()используя значения кортежа в качестве аргументов? Я читал об bind()объекте функции с call()функцией, а также о apply()функции в различных устаревших документах. Реализация GNU GCC 4.4, …
136 c++  c++11  arguments  tuples 

5
Новый синтаксис «= default» в C ++ 11
Я не понимаю, зачем мне это делать: struct S { int a; S(int aa) : a(aa) {} S() = default; }; Почему бы просто не сказать: S() {} // instead of S() = default; зачем вводить для этого новый синтаксис?
136 c++  c++11 

6
Генерация случайных чисел с использованием случайной библиотеки C ++ 11
Как следует из названия, я пытаюсь найти способ генерирования случайных чисел с помощью новой <random>библиотеки C ++ 11 . Я пробовал это с этим кодом: std::default_random_engine generator; std::uniform_real_distribution<double> uniform_distance(1, 10.001); Проблема с кодом, который у меня есть, заключается в том, что каждый раз, когда я компилирую и запускаю его, он …
135 c++  c++11  random  range 

4
Можно ли выяснить тип параметра и тип возврата лямбда?
Учитывая лямбду, возможно ли выяснить ее тип параметра и тип возвращаемого значения? Если да, то как? В принципе, я хочу, lambda_traitsкоторый может быть использован следующими способами: auto lambda = [](int i) { return long(i*10); }; lambda_traits<decltype(lambda)>::param_type i; //i should be int lambda_traits<decltype(lambda)>::return_type l; //l should be long Мотивация заключается в …

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