C ++ 20 est la cible de la version de C ++ après C ++ 17. Cette balise doit être utilisée (avec la balise C ++) pour les questions sur les fonctionnalités C ++ sur la bonne voie pour C ++ 20.

c++20...

J'ai une classe C ++ qui calcule certains paramètres statistiques en déplacement. Est-il acceptable de rejeter const de this pour implémenter la mise en cache de longs calculs, si je ne change pas l'état visible publiquement, et la fonction const en question est idempotente et pure / référentielleme....
2 juin 2020 à 20:42
Pour un certain contexte, j'écris un allocateur qui prend un allocateur de base comme type de modèle, et ne fait rien d'autre que transmettre les appels allocate() et deallocate() au membre d'allocateur sous-jacent. La création de std::vector avec cet allocateur personnalisé fonctionne très bien. J....
Dans l'exemple suivant, NRVO (Named Return Value Optimization) s'applique selon cet article: std::string f1() { std::string str; return str; // NVRO applies here! } Cependant, considérez: task<std::string> f2() { std::string str; co_return str; // Does NVRO also apply here? } ....
Je veux me débarrasser de tous les enable_if impies dans mes modèles et les remplacer par des concepts C ++ 20, mais il n'y a pratiquement aucune information sur les concepts et la syntaxe change avec à peu près toutes les sources que je lis. Voici une fonction qui prend deux itérateurs de n'importe....
14 mai 2020 à 12:19
Existe-t-il un moyen de "réduire un espace de noms"? Par exemple. std::chrono::milliseconds à std::milliseconds par l'espace de noms seul? C'est à dire. namespace std = std::chrono (veuillez ignorer le fait que cela modifie std. Ceci est juste un exemple que je pense que tout le monde peut comprend....
7 mai 2020 à 03:36
Je voudrais obtenir le dernier élément d'un pack de paramètres. Je l'ai fait avec le code suivant GodBolt: template<typename... Args> auto last(Args&&... args){ const auto& last = (args, ...); return last; } Mais maintenant je reçois l'avertissement l'opérande gauche de l'opérateur virgule n'....
20 avril 2020 à 14:10
Puisque la représentation du complément à deux en C ++ 20 est la seule représentation autorisée par le standard, avec la plage garantie de -2 N-1 à +2 N-1 -1. Ainsi, pour un type entier signé 64 bits, la plage va de -9'223'372'036'854'775'808 à 9'223'372'036'854'775'807. Cependant, ce code ne co....
18 avril 2020 à 16:52
Dans g ++ 10, j'essaie d'utiliser la comparaison à trois voies, juste pour l'expérience. J'ai lu que les autres opérateurs n'étaient plus nécessaires (sauf ==). Mais même si je peux utiliser un opérateur (il est implémenté sur le compilateur), il ne remplace pas (ou n'implique pas)! =. Ainsi, le cod....
14 mars 2020 à 12:15
Le code suivant se compile correctement avec clang-trunk en mode c ++ 17 mais s'arrête en mode c ++ 2a (prochain c ++ 20): // Meta struct describing the result of a comparison struct Meta {}; struct Foo { Meta operator==(const Foo&) {return Meta{};} Meta operator!=(const Foo&) {return Meta{....
6 mars 2020 à 19:29
J'ai essayé Google et une recherche rapide sur le dernier brouillon pour "C lang" et "C18" sur openstd org. La norme C ++ prendra-t-elle en charge les dernières normes de C?....
5 mars 2020 à 14:08
Pour imprimer n'importe quel type de std::pair, nous pouvons implémenter la méthode suivante: template<typename First, typename Second> void printPair(const std::pair<First, Second>& p) { std::cout << p.first << ", " << p.second << std::endl; } Mais supposons que nous voulions implémenter une m....
23 févr. 2020 à 03:54
Existe-t-il un moyen de vérifier dans C ++ 11 si une énumération est continue? Il est tout à fait valide de donner des valeurs d'énumération qui ne le sont pas. Y a-t-il peut-être une fonctionnalité comme un trait de type dans C ++ 14, C ++ 17 ou peut-être C ++ 20 pour vérifier si l'énumération est ....
6 févr. 2020 à 14:21
Im essayant de créer un type filtré d'un pack de modèle / paramètre variadic et également de préserver l'ordre. // example what im trying to accomplish template<typename... Args> struct query { using filtered = typename filtered<std::is_integral_v, Args...> } Dans cet exemple, filtré filtrerait....
Donné : #include <concepts> #include <iostream> template<class T> struct wrapper; template<std::signed_integral T> struct wrapper<T> { wrapper() = default; void print() { std::cout << "signed_integral" << std::endl; } }; template<std::integral T> struct wrapper<T> { wr....
28 janv. 2020 à 19:06
C ++ 20 autorise-t-il un lambda non capturant décomposé en un pointeur de fonction à être transmis directement en tant que paramètre de modèle non-type? Si oui, quelle est la syntaxe correcte? J'ai essayé le code suivant dans différentes versions de clang et gcc en utilisant -std=c++2a. #include <io....
16 janv. 2020 à 03:33
Comment obtenir la longueur correcte de std :: u8string? (en C ++ 20) J'ai essayé le code suivant qui imprime une valeur incorrecte de longueur qui peut retourner la valeur du nombre de points de code. Comment puis-je obtenir la valeur correcte à laquelle j'attendais 7 ce nombre de caractères? int m....
11 janv. 2020 à 07:46
Je me demande si un constexpr std::tuple peut être trié au moment de la compilation: template<typename T> struct A{ T val; }; // a constexpr-enabled class constexpr auto t = std::make_tuple( A<int>{3}, A<float>{1.f}, A<double>{2.0}); constexpr auto s = sort(t, [](auto&& v){return v.val; }); static....
2 janv. 2020 à 18:36
Considérez le code suivant: struct A { // No data members //... }; template<typename T, size_t N> struct B : A { T data[N]; } Voici comment vous devez initialiser B: B<int, 3> b = { {}, {1, 2, 3} }; Je veux éviter le vide inutile {} pour la classe de base. Il existe une solution propos....
Images pour lesquelles j'ai un std::vector de std::string, et je souhaite convertir ces std::string en std::string_view en boucle for basée sur une plage: auto v = std::vector<std::string>{"abc", "def", "ghi"}; for (std::string_view sv : v) { // do something with string_view } Le code ci-dessus....
7 déc. 2019 à 19:44
Supposons que j'ai un struct modèle S qui est paramétré par un moteur: template<class Engine> struct S; J'ai deux moteurs: un "statique" avec une fonction membre constexpr size(), et un "dynamique" avec une fonction non - constexpr membre size(): struct Static_engine { static constexpr std::siz....
15 nov. 2019 à 00:15
Je rencontre un comportement étrange avec le nouvel opérateur de vaisseau spatial <=> en C ++ 20. J'utilise le compilateur Visual Studio 2019 avec /std:c++latest. Ce code se compile correctement, comme prévu: #include <compare> struct X { int Dummy = 0; auto operator<=>(const X&) const = de....
9 nov. 2019 à 18:43
J'essaye de creuser dans les implications d'une fonction étant inline et suis tombé sur ce problème. Considérez ce petit programme (démo): /* ---------- main.cpp ---------- */ void other(); constexpr int get() { return 3; } int main() { std::cout << get() << std::endl; other(); } /* ....
Ceci est juste une question éducative, qui pourrait autrement être évitée entièrement en s'appuyant sur des outils tels que range-v3. Quoi qu'il en soit, considérons cet exemple dans lequel un nombre variadique de conteneurs est passé à une fonction qui renvoie un tuple d'itérateurs: #include <tuple....
17 oct. 2019 à 20:44
Existe-t-il une syntaxe pour contraindre une méthode non basée sur un modèle? Toutes les syntaxes que j'ai essayées sur godbolt avec la branche des concepts clang et gcc ne parviennent pas à se compiler: // these examples do not compile template <bool B> struct X { requires B void foo() {} ....
14 oct. 2019 à 20:55
Dans son récent discours "Tapez des punitions dans le C ++ moderne" Timur Doumler a déclaré que std::bit_cast ne peut pas être utilisé pour convertir un float en un {{ X2}} car les tableaux de style C ne peuvent pas être retournés à partir d'une fonction. Nous devrions soit utiliser std::memcpy, soi....
10 oct. 2019 à 12:59