«c++17» etiketlenmiş sorular

C ++ 17, 2017'de onaylanan C ++ standardının adıdır. Önceki C ++ 14 standardını temel alır, çekirdek dili ve standart kütüphaneyi geliştirir ve birkaç yeni dil özelliği ekler.

2
GCC9'ün std :: varyantının değersiz durumundan kaçınılması mümkün mü?
Son zamanlarda std::visit, derleyiciler arasında optimizasyonun güzel bir karşılaştırmasına yol açan bir Reddit tartışmasını izledim . Aşağıdakileri fark ettim: https://godbolt.org/z/D2Q5ED Hem GCC9 hem de Clang9 (sanırım aynı stdlib'i paylaşıyorlar), tüm türler bazı koşulları karşıladığında değersiz bir istisnayı kontrol etmek ve atmak için kod oluşturmazlar. Bu daha iyi kodgen yol açar, …

1
Std :: swap neden Clang / Win altındaki vektör <bool> öğeleri üzerinde çalışmıyor?
Ben böyle bir kod var: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } Bir vector&lt;bool&gt;yana akıl sağlığı ile ilgili tartışmalar, bu iyi çalışıyor: Mac için Clang Windows için Visual Studio Linux için GCC Sonra Windows üzerinde Clang ile inşa etmeyi denedim ve aşağıdaki hatayı aldım …

3
Lambda fonksiyonunu aşırı yükle
Basit bir yerel lambda işlevi nasıl aşırı yüklenir? Orijinal sorunun SSE'si: #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
Std :: vector range constructor açık dönüşümleri çağırabilir mi?
Aşağıdaki program iyi biçimlendirilmiş mi? #include &lt;vector&gt; struct A { explicit A(int) {} }; int main() { std::vector&lt;int&gt; vi = {1, 2, 3, 4, 5}; std::vector&lt;A&gt; va(vi.begin(), vi.end()); } C ++ 17 [sıra.reqmts] 'ye göre, X u(i, j); Xbir dizi kabı nerede : Tolacaktır EmplaceConstructibleiçine Xgelen *i. Ancak, önceki paragrafta …
14 c++  c++17 

1
C ++ nullptr uygulaması nasıl çalışır?
Nasıl nullptrçalıştığını merak ediyorum . N4659 ve N4849 standartları şunları söylüyor: tipi olmalıdır std::nullptr_t; adresini alamazsın; doğrudan bir işaretçiye ve işaretçiye üyeye dönüştürülebilir; sizeof(std::nullptr_t) == sizeof(void*); için, dönüşüm boolIS false; değeri aynı şekilde integral tipe dönüştürülebilir (void*)0, ancak geriye doğru değil; Yani temelde aynı anlama sahip bir sabittir (void*)0, ancak …

2
lambda'da static_assert ile constexpr varsa, hangi derleyici doğrudur?
Biz kullanmak istediğinizde static_assertbir de if constexprbazı şablon parametresine durum bağımlı yapmak zorundadır. İlginç bir şekilde, gcc ve clang, kod bir lambda içine sarıldığında katılmıyor. Aşağıdaki kod gcc ile derlenir, ancak clang if constexprdoğru olamazsa bile iddiayı tetikler . #include &lt;utility&gt; template&lt;typename T&gt; constexpr std::false_type False; template&lt;typename T&gt; void foo() …

1
İfade türleri, sürümler arasında C ++ ile neden değişti?
C ++ ifade türlerini anlamaya çalışıyorum ve ne kadar çok okursam, o kadar karıştı, çünkü C ++ taslağını sindirimi çok zor buluyorum ve bu nedenle diğer kaynakları tercih ediyorum ama ya birbirleriyle çelişiyorlar ya da C ++ sürümleri arasındaki ifadeler ve tanımlamalar büyük ölçüde değişir. Aşağıda aşağıdaki taslaklara atıfta bulunuyorum: …
13 c++  c++11  c++14  c++17  c++20 

1
Gcc'de belirsiz operatör
Bazı stl kaplarını yazdırmak için bir işlev şablonu yaptım #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 


2
Derleme zamanında "const char *" türünde iki dizeyi birleştirmek mümkün mü?
Açıkçası, bir constexprişlevde iki dize değişmezi birleştirebiliriz , ancak dize değişmezinin constexpraşağıdaki koddaki gibi başka bir işlev tarafından döndürülen bir dize ile birleştirilmesine ne dersiniz ? 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"; …
12 c++  c++17 


1
Std yapmak için modern yaklaşım :: vektör hizalanmış bellek ayırmak
Aşağıdaki soru cevaplar eski ancak, ilgili ve kullanıcı gelen açıklama edilir Marc Glisse yeterince ele olabilir bu soruna 17 C ++ yana yeni yaklaşımlar olduğunu öne sürüldü. Hala tüm verilere erişirken, SIMD için düzgün çalışan hizalanmış bellek almaya çalışıyorum. Intel'de, kayan bir tür vektörü oluşturur ve boyutumu __m2568 kat azaltırsam, …

1
Niteliksiz sort () - neden std :: array üzerinde değil, std :: vector üzerinde kullanıldığında derleniyor ve hangi derleyici doğru?
Çağrılırken std::sort()bir on 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)); } Hem gcc hem de clang, sıralamadaki bir hatayı döndürür std::array- clang diyor hata: bildirilmemiş 'sort' tanımlayıcısının kullanımı; Şunu mu demek istedin …
11 c++  c++17 

1
Satır içi bir değişken C ++ 17'de başlatıldıktan sonra değiştirilebilir mi?
Benim senaryom aşağıdaki (clang çalıştı ama gcc değil) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp: (dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); Sorun, satır içi değişkenin çalışma zamanında değiştirildiği için 28'i beklediğim yerlerde 0 göstermesidir. MSVC buna katılmıyor, ancak clang beklediğim şeyi yapıyor. Soru …
11 c++  visual-c++  dll  clang  c++17 

6
Döngü çalışmayan masum aralık
Aşağıdaki gelmez değil derlemek: #include &lt;iostream&gt; int main() { int a{},b{},c{},d{}; for (auto&amp; s : {a, b, c, d}) { s = 1; } std::cout &lt;&lt; a &lt;&lt; std::endl; return 0; } Godbolt üzerinde dene Derleyici hatası: error: assignment of read-only reference 's' Şimdi benim gerçek durumumda liste bir sınıftaki …

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.