L'argomento è stato discusso in precedenza , ma questo non è un duplicato. Quando qualcuno chiede la differenza tra decltype(a)e decltype((a)), la solita risposta è - aè una variabile, (a)è un'espressione. Trovo questa risposta insoddisfacente. Innanzitutto, aè anche un'espressione. Le opzioni per un'espressione primaria includono, tra le altre cose: (espressione) …
Supponi di avere il seguente codice: #include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> First{"example", "second" , "C++" , "Hello world" }; std::vector<std::string> Second{"Hello"}; First.swap(Second); for(auto a : Second) std::cout << a << "\n"; return 0; } Immagina che il vettore non lo sia std::string, eppure le classi: …
Sto usando una libreria C ++ ( strf ) che, da qualche parte al suo interno, ha il seguente codice: namespace strf { template <typename ForwardIt> inline auto range(ForwardIt begin, ForwardIt end) { /* ... */ } template <typename Range, typename CharT> inline auto range(const Range& range, const CharT* sep) …
In C ++, gli interi a larghezza fissa sono definiti come opzionali , ma non riesco a trovare il modo consigliato per verificare se sono effettivamente definiti. Quale sarebbe un modo portatile per verificare se sono disponibili numeri interi a larghezza fissa?
Ho scoperto che i risultati sono diversi tra i compilatori se uso un lambda per acquisire un riferimento a una variabile globale con una parola chiave mutabile e quindi modificare il valore nella funzione lambda. #include <stdio.h> #include <functional> int n = 100; std::function<int()> f() { int &m = n; …
Supponiamo di voler utilizzare le funzionalità C ++ <random>in un programma pratico (per alcune definizioni di "pratico" - i vincoli qui fanno parte di questa domanda). Il codice è approssimativamente simile a questo: int main(int argc, char **argv) { int seed = get_user_provided_seed_value(argc, argv); if (seed == 0) seed = …
Nel codice seguente, come posso fare in modo che la riga commentata funzioni allo stesso modo della riga appena sopra? Vorrei renderlo un codice generico, che chiama il costruttore adatto di un modello Type. #include <string> #include <iostream> template <typename Type> struct Class { Type data; Class(Type data) : data(data) …
C'è un modo per verificare in C ++ 11 se un enum è continuo ? È pienamente valido fornire valori enum che non lo sono. C'è forse una caratteristica come una caratteristica del tipo in C ++ 14, C ++ 17 o forse C ++ 20 per verificare se l'enum …
Qui un pezzo di codice C ++. In questo esempio, molti blocchi di codice sembrano chiamate del costruttore. Sfortunatamente, il codice di blocco n. 3 non lo è (puoi verificarlo usando https://godbolt.org/z/q3rsxn e https://cppinsights.io ). Penso che sia una vecchia notazione C ++ e potrebbe spiegare l'introduzione della nuova notazione …
Ho una funzione che accetta due argomenti: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } E una variadica che dovrebbe inoltrare i suoi argomenti in coppia: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % …
In C ++ 20, std::swapdiventa una constexprfunzione. So che la biblioteca standard è rimasta davvero indietro rispetto al linguaggio nel marcare le cose constexpr, ma nel 2017 <algorithm>era praticamente rappresentata come un mucchio di altre cose. Eppure - std::swapnon lo era. Ricordo vagamente che c'è qualche strano difetto del linguaggio …
Di 'che ho un vettore di numeri interi: std::vector<int> indices; for (int i=0; i<15; i++) indices.push_back(i); Quindi lo ordino in ordine decrescente: sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];}) for (int i=0; i<15; i++) printf("%i\n", indices[i]); Questo produce quanto segue: 14 13 12 11 10 9 …
Ho notato che l' inizializzazione dell'elenco aggregato di std :: vector esegue l' inizializzazione della copia quando lo spostamento è più applicabile. Allo stesso tempo, più emplace_backs fanno quello che voglio. Potrei solo trovare questa soluzione imperfetta di scrivere una funzione modello init_emplace_vector. Tuttavia, è ottimale solo per costruttori non …
Durante la lettura del libro C ++ Primer, mi sono imbattuto in questa affermazione: "Il numero di elementi in un array fa parte del tipo di array". Quindi volevo scoprirlo usando il seguente codice: #include<iostream> int main() { char Array1[]{'H', 'e', 'l', 'p'}; char Array2[]{'P', 'l', 'e', 'a', 's', 'e'}; …
Ho un modello di funzione che accetta molti tipi diversi come input. Di questi tipi solo uno ha una getInt()funzione. Quindi voglio che il codice esegua la funzione solo per quel tipo. Si prega di suggerire una soluzione. Grazie #include <type_traits> #include <typeinfo> class X { public: int getInt(){ return …
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.