Запитання з тегом «c++11»

Використовуйте цей тег для коду, який повинен скласти як C ++ 11 (не використовуючи жодних функцій, введених у C ++ 14 або новіших версіях).


3
Як правильно перевірити, чи функція std :: порожня в 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код, очевидно, виходить …

6
Чому std :: initializer_list не є вбудованою мовою?
Чому не std::initializer_listвбудована основна мова? Мені здається, що це досить важлива особливість C ++ 11, і все ж він не має власного зарезервованого ключового слова (або чогось іншого). Натомість initializer_listце просто клас шаблону зі стандартної бібліотеки, який має спеціальне, неявне зіставлення з нового синтаксису дужок-init-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 четвертого видання “Мова програмування C ++” чітко визначену поведінку?
У розділі STL-подібних операцій 4-го випуску мови програмування на мові програмування C ++ Бьярна Струструпа такий код використовується як приклад ланцюжка :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" ), 4, …

7
Функції C ++ 11 у Visual Studio 2012
Попередня версія Visual Studio 2012 (наступна версія після VS2010) є в даний час доступна . Хтось знає, які нові функції C ++ 11 він підтримує? (На даний момент я не в змозі випробувати).

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}; auto …

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

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 і …

8
Чому макроси препроцесора є злими і які альтернативи?
Я завжди про це питав, але ніколи не отримував справді хорошої відповіді; Я думаю, що майже будь-який програміст ще до написання першого "Hello World" стикався з фразою типу "макрос ніколи не можна використовувати", "макрос - це зло" тощо, моє запитання: чому? З новим C ++ 11 чи існує реальна альтернатива …

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

6
Термінал C ++ викликається без активного винятку
Я отримую помилку C ++ з потоками: terminate called without an active exception Aborted Ось код: #include &lt;queue&gt; #include &lt;thread&gt; #include &lt;mutex&gt; #include &lt;condition_variable&gt; template&lt;typename TYPE&gt; class blocking_stream { public: blocking_stream(size_t max_buffer_size_) : max_buffer_size(max_buffer_size_) { } //PUSH data into the buffer blocking_stream &amp;operator&lt;&lt;(TYPE &amp;other) { std::unique_lock&lt;std::mutex&gt; mtx_lock(mtx); while(buffer.size()&gt;=max_buffer_size) stop_if_full.wait(mtx_lock); buffer.push(std::move(other)); …

15
Чи має С ++ 11 властивості стилю C #?
У C # є симпатичний синтаксичний цукор для полів з геттером та сеттером. Більше того, мені подобаються автореалізовані властивості, які дозволяють мені писати public Foo foo { get; private set; } У C ++ я повинен писати private: Foo foo; public: Foo getFoo() { return foo; } Чи є така …
93 c#  c++  class  c++11 

2
Що означає [=] у C ++?
Я хочу знати, що [=]робить? Ось короткий приклад template &lt;typename T&gt; std::function&lt;T (T)&gt; makeConverter(T factor, T offset) { return [=] (T input) -&gt; T { return (offset + input) * factor; }; } auto milesToKm = makeConverter(1.60936, 0.0); Як би працював код []замість [=]? Я припускаю, що std::function&lt;T (T)&gt; означає …
93 c++  c++11  lambda 

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.