coding - naming convention class c++



Pourquoi "Init" dans std:: ios_base:: Init majuscule? (1)

Tous les noms de la bibliothèque C ++ standard sont en minuscules sauf std::ios_base::Init . Pourquoi est-ce?


Dans un premier draft des classes IOStream, vous pouvez voir ios_base n'était pas présent à l'origine, basic_ios était la classe de base et était responsable de Init et des autres membres qui ont ensuite été séparés en ios_base .

basic_ios également (et a toujours ) une fonction init , et bien que les deux noms n'aient pas nécessairement à être distincts, probablement pour essayer d'éviter la confusion, il a été décidé de nommer la classe Init et la fonction init . En outre, sans cette distinction, quelque chose comme ce qui suit aurait été nécessaire lors de l'utilisation de la classe:

struct ios_base
{
  struct init{};
  void init();
};

ios_base::init i1;        // error
struct ios_base::init i2; // ok

L'idée d'avoir une classe distincte responsable de l'initialisation des flux standards remonte au moins à CFront 3.0, comme le montre Iostream_init dans this en this tête. À un moment donné, il a été décidé non seulement de faire de la classe un membre de ios / basic_ios / ios_base mais de le renommer Init .

Quoi qu'il en soit, il est logique de désambiguïser les deux, même en tenant compte du fait qu'ils ont finalement été placés dans des classes séparées. Ils auraient pu choisir des noms complètement séparés à la place, mais Init / init était probablement le meilleur choix sémantique pour décrire ce que la classe et la fonction font, et il y a aussi une chance qu'il imite simplement l'ancien Iostream_init , qui pour une raison quelconque commence aussi une majuscule I





c++-standard-library