Articles of c ++ 11

Est-il possible de déterminer le nombre d’éléments d’une classe d’énumération c ++?

Est-il possible de déterminer la cardinalité d’une enum class c ++ enum class : enum class Example { A, B, C, D, E }; J’ai essayé d’utiliser sizeof , cependant, il renvoie la taille d’un élément enum. sizeof(Example); // Returns 4 (on my architecture) Existe-t-il une méthode standard pour obtenir la cardinalité (5 dans mon […]

Obtenir la valeur min / max d’un tableau statique constexpr au moment de la compilation

Disons que j’ai un tableau d’entiers défini comme ça: static constexpr int IntArray[] = {1, 5, 10, 12, 17}; Y a-t-il un moyen d’obtenir la valeur minimale ou maximale au moment de la compilation?

Pourquoi les membres const peuvent-ils être modifiés dans un constructeur?

Je suis curieux de savoir pourquoi les membres const peuvent être modifiés dans le constructeur. Existe-t-il une règle standard dans l’initialisation qui remplace la “const-ness” d’un membre? struct Bar { const int b = 5; // default member initialization Bar(int c):b(c) {} }; Bar *b = new Bar(2); // Problem: Bar::b is modified to 2 […]

Diviser une chaîne en utilisant C ++ 11

Quelle serait la méthode la plus simple pour diviser une chaîne en utilisant c ++ 11? J’ai vu la méthode utilisée par cet article , mais j’estime qu’il devrait y avoir une manière moins verbeuse de le faire en utilisant la nouvelle norme. Edit: Je voudrais avoir un vector et pouvoir délimiter un seul caractère.

Pourquoi C ++ 11 a-t-il supprimé la valeur par défaut des prototypes du constructeur de remplissage de std :: vector?

En C ++ 98, le prototype du constructeur de remplissage std::vector a une valeur par défaut pour l’initialiseur. explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type()); C ++ 11 utilise deux prototypes. explicit vector (size_type n); vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type()); (En C […]

Comment gérer noexcept dans Visual Studio

J’essaie de créer une exception personnalisée dérivant de std::exception et what() remplace what() . Au début, je l’ai écrit comme ceci: class UserException : public std::exception { private: const std::ssortingng message; public: UserException(const std::ssortingng &message) : message(message) {} virtual const char* what() const override { return message.c_str(); } }; Cela fonctionne bien dans VS2012, mais […]

Pourquoi std :: pair est-il plus rapide que std :: tuple

Voici le code pour tester. Test de tuple: using namespace std; int main(){ vector<tuple> v; for (int var = 0; var < 100000000; ++var) { v.push_back(make_tuple(var, var)); } } Test de paire: #include using namespace std; int main(){ vector<pair> v; for (int var = 0; var < 100000000; ++var) { v.push_back(make_pair(var, var)); } } J’ai […]

Y a-t-il un intérêt à utiliser `override` lors de la substitution d’une fonction virtuelle pure?

Par exemple: class Base { virtual void my_function() = 0; }; class Derived : Base { void my_function() override; }; D’après ce que j’ai lu, le mot-clé override est utilisé pour s’assurer que nous avons la bonne signature dans la fonction que nous remplaçons, et cela semble être sa seule utilisation. Cependant, dans le cas […]

Y a-t-il une astuce ninja pour rendre une variable constante après sa déclaration?

Je sais que la réponse est 99,99% non, mais je pensais que cela valait la peine d’essayer, on ne sait jamais. void SomeFunction(int a) { // Here some processing happens on a, for example: a *= 50; a %= 10; if(example()) a = 0; // From this point on I want to make “a” const; […]

Définissez tous les octets de int sur (caractère non signé) 0, garanti pour représenter zéro?

Ce n’est pas une question de pratique recommandée (ni de comportement non défini ), mais de ce que la norme c ++ garantit réellement en ce qui concerne la conversion de tous les octets d’un type entier à la valeur de (unsigned char)0 . Questions) Dans l’extrait de code ci-dessous, l’expression utilisée par l’ instruction […]