C ++ 17 est le nom du standard C ++ approuvé en 2017. Il s'appuie sur l'ancien standard C ++ 14, améliorant le langage de base et la bibliothèque standard, et ajoutant quelques nouvelles fonctionnalités de langage.
Disons que j'ai un shared_ptravec un allocateur personnalisé et un suppresseur personnalisé. Je ne trouve rien dans la norme qui parle de l'endroit où le suppresseur doit être stocké: il ne dit pas que l'allocateur personnalisé sera utilisé pour la mémoire du suppresseur, et il ne dit pas qu'il ne …
#include <optional> bool f() { std::optional<int> opt; return opt; } Ne compile pas: 'return': cannot convert from 'std::optional<int>' to 'bool' Consultation de référence J'aurais pensé trouver une explication, mais je l'ai lu comme il se doit. Des conversions implicites sont effectuées chaque fois qu'une expression d'un certain type T1 est …
Comment par un type de variante donné using V = std::variant<bool, char, std::string, int, float, double, std::vector<int>>; déclarer deux types de variantes using V1 = std::variant<bool, char, int, float, double>; using V2 = std::variant<std::string, std::vector<int>>; d'où V1inclut tous les types arithmétiques Vet V2inclut tous les types non arithmétiques V? V …
J'ai une fonction de modèle surchargée: template<typename T1, typename T2> auto overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < a ? a : b; } template<typename RT, typename T1, typename T2> RT overMax(T1 a, T2 b) { std::cout << __FUNCSIG__ << std::endl; return b < …
Cppreference a cet exemple de code pour std::transform: std::vector<std::size_t> ordinals; std::transform(s.begin(), s.end(), std::back_inserter(ordinals), [](unsigned char c) -> std::size_t { return c; }); Mais cela dit aussi: std::transformne garantit pas l'application dans l'ordre de unary_opou binary_op. Pour appliquer une fonction à une séquence dans l'ordre ou pour appliquer une fonction qui …
Je travaille dans un projet avec C ++ 11 et j'ai essayé de suivre le code #include <atomic> struct A { std::atomic_int idx = 1; }; int main() { return 0; } J'obtiens l'erreur du compilateur error: use of deleted function 'std::__atomic_base<_IntTp>::__atomic_base(const std::__atomic_base<_IntTp>&) [with _ITp = int]' std::atomic_int idx = …
Existe-t-il un moyen de vérifier en 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. Existe-t-il peut-être une fonctionnalité comme un trait de type en C ++ 14, C ++ 17 ou peut-être C …
Notre équipe travaille avec une base de code C ++ de 10 ans et plus et est récemment passée à un compilateur C ++ 17. Nous recherchons donc des moyens de moderniser notre code. Lors d'une conférence sur YouTube, j'ai entendu la suggestion de remplacer const char*les chaînes mondiales par …
Je jouais avec autoen std::pair. Dans le code ci-dessous, la fonction fest censée retourner un std::pairtype qui dépend d'un paramètre de modèle. Un exemple pratique: EXEMPLE 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == …
Je compile ce programme par g ++ et clang ++. Il y a une différence: g ++ affiche 1, mais clang ++ affiche 2. Il semble que g ++: la variable externe est définie dans la portée la plus courte. clang ++: la variable externe est définie dans la portée …
Est-ce un C ++ valide? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC et MSVC pensent que c'est OK, Clang pense que ce n'est pas le cas: Compiler Explorer . Tous les compilateurs conviennent que celui-ci est OK: Explorateur de compilateurs . int main() …
Je suis tombé sur ce comportement std::gcdque j'ai trouvé inattendu: #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 …
J'ai un code comme celui-ci: #include <vector> #include <utility> int main() { std::vector<bool> vb{true, false}; std::swap(vb[0], vb[1]); } Arguments sur la raison de vector<bool>côté, cela fonctionnait très bien sur: Clang pour Mac Visual Studio pour Windows GCC pour Linux Ensuite, j'ai essayé de le construire avec Clang sur Windows et …
J'ai récemment suivi une discussion sur Reddit qui a conduit à une belle comparaison de l' std::visitoptimisation entre les compilateurs. J'ai remarqué ce qui suit: https://godbolt.org/z/D2Q5ED GCC9 et Clang9 (je suppose qu'ils partagent le même stdlib) ne génèrent pas de code pour vérifier et lever une exception sans valeur lorsque …
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.