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

C ++ 17 - это название стандарта C ++, утвержденного в 2017 году. Он основан на предыдущем стандарте C ++ 14, улучшая базовый язык и стандартную библиотеку, а также добавляя несколько новых языковых функций.

1
Это ошибка в std :: gcd?
Я сталкивался с таким поведением, std::gcdкоторое я нашел неожиданным: #include <iostream> #include <numeric> int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type<decltype(a), decltype(b)>::type; C ca = std::abs(a); C cb = b; std::cout << a << …

5
Как сделать групповую или парную складку пакета параметров?
template<class Msg, class... Args> std::wstring descf(Msg, Args&&... args) { std::wostringstream woss; owss << Msg << ". " << ... << " " << args << ": '" << args << "' ";//not legal at all //or owss << Msg << ". " << args[0] << ": '" << args[1] << …

2
GCC9 позволяет избежать бесполезного состояния std :: option?
Недавно я следил за обсуждением Reddit, которое привело к хорошему сравнению std::visitоптимизации по компиляторам. Я заметил следующее: https://godbolt.org/z/D2Q5ED И GCC9, и Clang9 (я полагаю, они используют один и тот же stdlib) не генерируют код для проверки и создания бесполезного исключения, когда все типы удовлетворяют некоторым условиям. Это приводит к улучшению …

1
Может ли конструктор диапазона std :: vector вызывать явные преобразования?
Правильно ли сформирована следующая программа? #include <vector> struct A { explicit A(int) {} }; int main() { std::vector<int> vi = {1, 2, 3, 4, 5}; std::vector<A> va(vi.begin(), vi.end()); } Согласно C ++ 17 [sequence.reqmts], требование для X u(i, j); где Xконтейнер последовательности, это: Tдолжен быть EmplaceConstructibleв Xот *i. Однако в …
14 c++  c++17 

1
Почему std :: swap не работает с векторными элементами <bool> в Clang / Win?
У меня есть такой код: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } Аргументы о здравомыслии в vector&lt;bool&gt;стороне, это работало очень хорошо на: Лязг для Mac Visual Studio для Windows GCC для Linux Затем я попытался собрать его с помощью Clang в Windows и получил …

3
Перегрузка лямбда-функции
Как перегрузить простую локальную лямбда-функцию? SSE оригинальной задачи: #include &lt;iostream&gt; #include &lt;map&gt; void read() { static std::string line; std::getline(std::cin, line); auto translate = [](int idx) { constexpr static int table[8]{ 7,6,5,4,3,2,1,0 }; return table[idx]; }; auto translate = [](char c) { std::map&lt;char, int&gt; table{ {'a', 0}, {'b', 1}, {'c', 2}, …

1
Как работает реализация C ++ nullptr?
Мне любопытно узнать, как nullptrработает. Стандарты N4659 и N4849 гласят: он должен иметь тип std::nullptr_t; вы не можете взять его адрес; это может быть непосредственно преобразовано в указатель и указатель на член; sizeof(std::nullptr_t) == sizeof(void*); его преобразование в boolесть false; его значение может быть преобразовано в целочисленный тип идентично (void*)0, …

2
если constexpr с static_assert в лямбде, какой компилятор правильный?
Когда мы хотим использовать a static_assertв a, if constexprмы должны сделать условие зависимым от некоторого параметра шаблона. Интересно, что gcc и clang не согласны, когда код обернут в лямбду. Следующий код компилируется с помощью gcc, но clang запускает утверждение, даже если значение if constexprне может быть истинным. #include &lt;utility&gt; template&lt;typename …

1
Почему типы выражений менялись в C ++ между версиями?
Я пытаюсь понять типы выражений C ++, и чем больше я читаю, тем больше я запутался, поскольку нахожу черновик C ++ очень сложным для восприятия и поэтому предпочитаю другие ресурсы, но они либо противоречат друг другу, либо не учитывают, что формулировка и определение между версиями C ++ сильно изменяются. Далее …
13 c++  c++11  c++14  c++17  c++20 

1
Неоднозначный оператор в gcc
Я сделал шаблон функции для печати некоторых контейнеров stl #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; template &lt;template &lt;typename, typename&gt; class C, typename T, typename A&gt; std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const C&lt;T, A&gt;&amp; container) { for (auto&amp; elem : container) { os &lt;&lt; elem &lt;&lt; " "; } return os; } int …
13 c++  c++17 

1
Возможное неопределенное поведение в примитивной реализации static_vector
tl; dr: я думаю, что мой static_vector имеет неопределенное поведение, но я не могу его найти. Эта проблема на Microsoft Visual C ++ 17. У меня есть эта простая и незавершенная реализация static_vector, то есть вектор с фиксированной емкостью, который может быть выделен в стеке. Это программа C ++ 17, …

2
Можно ли объединить две строки типа `const char *` во время компиляции?
Очевидно, что мы можем объединить два строковых литерала в constexprфункции, но как насчет объединения строкового литерала со строкой, возвращенной другой constexprфункцией, как в коде ниже? template &lt;class T&gt; constexpr const char * get_arithmetic_size() { switch (sizeof(T)) { case 1: return "1"; case 2: return "2"; case 4: return "4"; case …
12 c++  c++17 

1
Стандартно ли гарантировано, что лямбда без захвата будет пустой?
Я ищу способ идентифицировать пустые (без захвата) лямбды из других лямбд в функции шаблона. В настоящее время я использую C ++ 17, но мне тоже интересно узнать ответы на C ++ 20. Мой код выглядит так: template&lt;typename T&gt; auto func(T lambda) { // The aguments of the lambdas are unknown …
12 c++  lambda  c++17  c++20 

1
Современный подход к созданию std :: vector для выравнивания памяти
Следующий вопрос связан, однако ответы на старые, и комментарий от пользователя Marc Glisse предполагает , что есть новые подходы , начиная с C ++ 17 к решению этой проблемы , которые не могут быть адекватно обсуждены. Я пытаюсь выровнять память, работающую правильно для SIMD, при этом все еще имея доступ …

1
Неквалифицированный sort () - почему он компилируется при использовании на std :: vector, а не на std :: array, и какой компилятор корректен?
При звонке std::sort()на std::array: #include &lt;vector&gt; #include &lt;array&gt; #include &lt;algorithm&gt; int main() { std::vector&lt;int&gt; foo{4, 1, 2, 3}; sort(begin(foo), end(foo)); std::array&lt;int, 4&gt; foo2{4, 1, 2, 3}; sort(begin(foo2), end(foo2)); } И gcc, и clang возвращают ошибку в сортировке std::array- clang говорит ошибка: использование необъявленного идентификатора 'sort'; Вы имели в виду 'std …
11 c++  c++17 

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