C ++ 11 nouvelles fonctionnalités utilisant ... = ... (mise à jour continue ...)

Catalogue de séries d'articles

Mot clé C ++ 11 utilisant le mot clé
C ++ 11 auto
Pointeur intelligent C ++ unique_ptr Pointeur intelligent
C ++ shared_ptr / faible_ptr

Préface

L'histoire du langage de programmation C ++ remonte à 1979, lorsque Bjarne Stroustrup (le père de C ++, plus tard appelé Stroustrup) utilisait encore le langage Simula pour le travail de développement.

En 1998, le Comité des normes C ++ a publié la première version de la norme C ++ et l'a nommée norme C ++ 98. Selon une personne inconnue, le livre "Annotated C ++ Reference Manual" a eu un grand impact sur la formulation du standard C ++ 98.

Après l'itération continue de l'auteur, un livre aura souvent plusieurs versions publiées successivement, et chaque nouvelle version est une révision et une mise à jour de la version précédente. Il en va de même pour le développement du langage de programmation C ++. Jusqu'à présent (2020), le développement du C ++ est passé par les 3 standards suivants:

En 2011, le nouveau standard C ++ 11 est né pour remplacer le standard C ++ 98.

En 2014, le standard C ++ 14 a été publié, et la bibliothèque standard a apporté de meilleures modifications et mises à jour à la bibliothèque standard C ++ 11;

Fin 2017, la norme C ++ 17 a été officiellement promulguée;

Bien que l'apprentissage du C ++ 11 prenne un certain temps, cela en vaut la peine; C ++ 11 est très pratique, il améliore non seulement l'efficacité du développement, mais rend également le programme plus robuste et élégant. Les programmeurs devraient être prêts à mettre à niveau leurs connaissances existantes, et l'apprentissage et l'utilisation de C ++ 11 sont depuis longtemps la tendance générale.

Premièrement, l'utilisation de l'utilisation en C ++ 11

Lorsque j'ai appris le C ++ pour la première fois, l'utilisation la plus connue de l'utilisation était sans aucun doute l'utilisation d'espaces de noms. Par exemple using namespace std;, elle a introduit deux utilisations plus récentes dans C ++ 11:

1. Se référer aux membres de la classe de base dans la sous-classe

Par exemple, la sous-classe hérite en privé de la classe parente. Nous savons tous que l'héritage privé héritera des parties publique et protégée de la classe parente en tant que membres privés de la sous-classe. Cela signifie que l'objet de la sous-classe ne peut pas être utilisé pour appeler directement le parent. membres de la classe.

Mais en utilisant l'utilisation peut accéder

class father {
    
    
public:
    father() :value(55) {
    
    }
    virtual ~father() {
    
    }
    void test1() {
    
     cout << "father test1..." << endl; }
protected:
    int value;
};

class son : private father {
    
    
public:
    using father::test1;
    using father::value;
    void test2() {
    
     cout << "value is " << value << endl; }
};

int main(int argv, char* argc[])
{
    
    
    son son;
    son.test1();
    son.test2();
}

2. à l'aide de définir un alias

Tout le monde sait qu'en C ++, vous pouvez redéfinir un type via typedef:

typedef unsigned int uint_t;

Mais face aux exemples suivants, est-ce que ça va commencer à se sentir moche? Nous voulons en fait juste définir un pointeur de fonction.

typedef void (*Fun) (int, const std::string&);

Si vous utilisez using, cela a-t-il l'air plus simple?

using Fun = void (*) (int, const std::string&);

Deuxièmement, l'utilisation avancée des alias

L'utilisation de using pour définir des alias ressemble à l'utilisation de typedef, mais en fait, typede ne peut pas redéfinir les modèles.
Par exemple:
il existe maintenant des modèles

template<typename T>
typedef map<std::string, T> mapT;

Lorsque nous voulons définir de cette façon, nous typedef map<std::string, T> mapT;voulons en fait définir un modèle dont la clé est un type chaîne, mais le type de valeur est incertain, mais c'est faux, car T est un type incertain pour typedef pour le moment. Si vous voulez vraiment pour le forcer, vous devez écrire comme ça

template <typename T>
struct str_map
{
    
    
    typedef std::map<std::string, T> mapT;
};
str_map<int>::mapT map;

Mais si vous utilisez using, vous pouvez facilement redéfinir le modèle


template<typename T>
using mapT = map<std::string, T>;

Pour résumer

En cours de mise à jour ~
Si cela vous aide, veuillez l'aimer!
Ne pas redistribuer sans autorisation!

Je suppose que tu aimes

Origine blog.csdn.net/qq_42956179/article/details/115386379
conseillé
Classement