C ++ 17 è il nome dello standard C ++ approvato nel 2017. Si basa sul precedente standard C ++ 14, migliorando il linguaggio principale e la libreria standard e aggiungendo alcune nuove funzionalità linguistiche.
Ci sono insidie per sistemi operativi specifici, dovrei essere a conoscenza? Ci sono molti duplicati ( 1 , 2 , 3 , 4 , 5 ) di questa domanda ma hanno avuto risposta decenni fa. Le risposte molto alte in molte di queste domande sono oggi sbagliate. Metodi da altri …
Per quanto ho capito, C ++ 14 è stato introdotto std::make_uniqueperché, a causa della mancata specificazione dell'ordine di valutazione dei parametri, questo non era sicuro: f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A (Spiegazione: se la valutazione alloca prima la memoria per il puntatore non elaborato, quindi chiama g()e viene generata un'eccezione …
Cerco di utilizzare le nuove funzionalità di c ++ 1z attualmente in testa allo sviluppo all'interno di gcc 6.0. Se provo questo piccolo esempio: #include <iostream> #include <experimental/filesystem> namespace fs = std::experimental::filesystem; int main() { fs::path p1 = "/home/pete/checkit"; std::cout << "p1 = " << p1 << std::endl; } Ho …
Ho appena visto Stephan T. Lavavej parlare a CppCon 2018"Class Template Argument Deduction", dove a un certo punto dice per inciso: In C ++ le informazioni di tipo non fluiscono quasi mai all'indietro ... Ho dovuto dire "quasi" perché ci sono uno o due casi, forse di più ma molto …
In occasione della riunione 2016 degli standard ISO C ++ di Oulu, una proposta denominata Eliminazione della copia garantita tramite categorie di valori semplificate è stata votata in C ++ 17 dal comitato degli standard. Come funziona esattamente l'elisione della copia garantita? Copre alcuni casi in cui l'elisione della copia …
Ho un progetto che attualmente utilizza C ++ 11/14, ma richiede qualcosa di simile std::filesystem, che è disponibile solo in C ++ 17, e quindi non ho la possibilità di usarlo attualmente. Vedo, tuttavia, che è disponibile nel mio compilatore attuale come std::experimental::filesystem. È una buona idea utilizzare funzionalità sperimentali, …
Lo standard C ++ 17 introduce "guide alla detrazione dei modelli". Immagino che abbiano qualcosa a che fare con la nuova deduzione dell'argomento del modello per i costruttori introdotta in questa versione dello standard, ma non ho ancora visto una semplice spiegazione in stile FAQ di cosa sono ea cosa …
(In riferimento a questa domanda e risposta .) Prima dello standard C ++ 17, la seguente frase era inclusa in [basic.compound] / 3 : Se un oggetto di tipo T si trova in un indirizzo A, si dice che un puntatore di tipo cv T * il cui valore è …
Sto cercando di capire come ottenere l'indirizzo di una funzione lambda all'interno di se stesso. Ecco un codice di esempio: []() { std::cout << "Address of this lambda function is => " << ???? }(); So che posso catturare la lambda in una variabile e stampare l'indirizzo, ma voglio farlo …
Mi sono imbattuto in qualcosa di strano quando ho fatto un modello di metaprogrammazione l'altro giorno. Fondamentalmente si riduce a questa affermazione non (come mi aspetterei) che passi. static_assert(std::is_same_v<void(), std::remove_reference_t<void()&>>); All'inizio pensavo di commettere un errore sintattico nel definire un riferimento di funzione, ma questa affermazione passa, dimostrando che non …
C'è un modo per verificare se due funzioni hanno la stessa firma? Per esempio: int funA (int a, int b); int funB (int a, int b); float funC (int a, int b); int funD (float a, int b); In questo esempio, funAed funBè l'unica combinazione di funzioni che dovrebbero ritornare …
In C ++ 17, come si dichiara e inizializza un vettore di coppie (o tuple) con un elemento opzionale? std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true}, {2, false}, {3, nullptr}}; Ho una coppia in cui il secondo elemento può essere nullo / facoltativo.
Questo codice non viene compilato in Clang (6,7,8,9, trunk), ma viene compilato correttamente in GCC (7.1, 8.1, 9.1): template<class T> struct TypeHolder { using type = T; }; template<int i> class Outer { private: template<class T> static constexpr auto compute_type() { if constexpr (i == 42) { return TypeHolder<bool>{}; } …
Considera il seguente codice . struct any { template <typename T> operator T &&() const; template <typename T> operator T &() const; }; int main() { int a = any{}; } Qui il secondo operatore di conversione viene scelto dalla risoluzione di sovraccarico. Perché? Per quanto ho capito, i due …
Autoesplicativo. Fondamentalmente, dire che ho elenchi di tipi in questo modo: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Possono essere un numero variabile di elenchi di tipi. Come posso ottenere una lista dei tipi di prodotti cartesiani? result = type_list< type_list<int, somestructB, double>, …
We use cookies and other tracking technologies to improve your browsing experience on our website,
to show you personalized content and targeted ads, to analyze our website traffic,
and to understand where our visitors are coming from.
By continuing, you consent to our use of cookies and other tracking technologies and
affirm you're at least 16 years old or have consent from a parent or guardian.