Pytania otagowane jako c++17

C ++ 17 to nazwa standardu C ++ zatwierdzonego w 2017 roku. Opiera się on na poprzednim standardzie C ++ 14, ulepszając podstawowy język i standardową bibliotekę oraz dodając kilka nowych funkcji językowych.


1
Czy to błąd w std :: gcd?
Natknąłem się na takie zachowanie, std::gcdktóre okazało się nieoczekiwane: #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 << …


2
Czy GCC9 unika bezwartościowego stanu std :: variant jest dozwolone?
Niedawno śledziłem dyskusję na temat Reddit, która doprowadziła do miłego porównania std::visitoptymalizacji między kompilatorami. Zauważyłem, co następuje: https://godbolt.org/z/D2Q5ED Zarówno GCC9, jak i Clang9 (myślę, że współużytkują ten sam stdlib) nie generują kodu do sprawdzania i zgłaszania wyjątku bezwartościowego, gdy wszystkie typy spełniają określone warunki. To prowadzi do znacznie lepszego codegen, …

1
Czy konstruktor zakresu std :: vector może wywoływać jawne konwersje?
Czy następujący program jest dobrze sformułowany? #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()); } Zgodnie z C ++ 17 [sekwencja.reqmts] wymóg dotyczący X u(i, j); gdzie Xjest kontenerem sekwencji, jest: Tbędzie EmplaceConstructibledo Xz *i. …
14 c++  c++17 

3
Przeciąż funkcję lambda
Jak przeciążyć prostą lokalną funkcję lambda? SSE oryginalnego problemu: #include <iostream> #include <map> 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<char, int> table{ {'a', 0}, {'b', 1}, {'c', …

1
Dlaczego std :: swap nie działa na elementach wektora <bool> w Clang / Win?
Mam taki kod: #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;Pomijając argumenty na temat rozsądku , działało to dobrze: Clang dla komputerów Mac Visual Studio dla Windows GCC dla systemu Linux Następnie próbowałem zbudować go za pomocą Clanga w systemie Windows i otrzymałem następujący …

1
Jak działa implementacja cull ntrptr?
Jestem ciekawy, jak nullptrdziała. Normy N4659 i N4849 mówią: musi mieć typ std::nullptr_t; nie możesz wziąć jego adresu; można go bezpośrednio przekonwertować na wskaźnik, a wskaźnik na element członkowski; sizeof(std::nullptr_t) == sizeof(void*); jego konwersja na booljest false; jego wartość można przekonwertować na typ całkowy identycznie (void*)0, ale nie wstecz; Jest …

2
jeśli constexpr z static_assert w lambda, który kompilator jest poprawny?
Kiedy chcemy używać static_assertw sposób if constexprmusimy warunek zależny od jakiegoś parametru szablonu. Co ciekawe, gcc i clang nie zgadzają się, gdy kod jest zawarty w lambda. Poniższy kod kompiluje się z gcc, ale clang wyzwala aser, nawet jeśli if constexprnie może to być prawda. #include &lt;utility&gt; template&lt;typename T&gt; constexpr …


1
Ambigious operator w gcc
Stworzyłem szablon funkcji do drukowania niektórych pojemników 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 main() …
13 c++  c++17 


2
Czy w czasie kompilacji można połączyć dwa łańcuchy typu `const char *`?
Oczywiście możemy połączyć dwie literały łańcuchowe w constexprfunkcji, ale co z konkatenacją literału łańcuchowego z łańcuchem zwróconym przez inną constexprfunkcję, jak w kodzie poniżej? 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 8: …
12 c++  c++17 

1
Czy zgodnie z normą gwarantowana lambda bez wychwytywania jest pusta?
Poszukuję sposobu na identyfikację pustych (niewychwyconych) lambd z innych lambd w funkcji szablonu. Obecnie używam C ++ 17, ale jestem również ciekawy odpowiedzi na C ++ 20. Mój kod wygląda następująco: template&lt;typename T&gt; auto func(T lambda) { // The aguments of the lambdas are unknown if constexpr (/* is captureless …
12 c++  lambda  c++17  c++20 

1
Nowoczesne podejście do przydzielania wyrównanej pamięci std :: vector
Następujące pytanie związane jest jednak odpowiedzi są stare, i komentarz od użytkownika Marc Glisse sugeruje nowych podejść od C ++ 17 do tego problemu, które nie mogą być należycie rozpatrzone. Próbuję uzyskać wyrównaną pamięć działającą poprawnie dla SIMD, wciąż mając dostęp do wszystkich danych. W przypadku Intela, jeśli utworzę wektor …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.