Bien que les gens semblent aimer se plaindre à propos du C++, je n'ai pas pu trouver beaucoup d'éléments expliquant pourquoi vous voudriez choisir le C plutôt que le C++. Le C ne semble pas recevoir autant de critiques et si le C++ a tous ces problèmes, pourquoi ne pas se limiter au sous-ensemble C ? Quelles sont vos réflexions/expériences ?
Réponses
Trop de publicités?Je suis surpris que personne n'ait mentionné les bibliothèques. De nombreux langages peuvent se lier à des librairies C et appeler des fonctions C (y compris C++ avec extern "C"). Le C++ est à peu près la seule chose qui peut utiliser une librairie C++ (définie comme "une librairie qui utilise des fonctionnalités en C++ qui ne sont pas en C [telles que les fonctions surchargées, les méthodes virtuelles, les opérateurs surchargés, ...], et qui n'exporte pas tout à travers des interfaces compatibles C via extern "C"").
Parce qu'ils veulent utiliser des fonctionnalités en C99 qui n'ont pas d'équivalents en C++.
Cependant, il n'y a pas autant de fonctionnalités de C99 qui sont utiles au C++ que les gens le pensent à première vue. Des tableaux de longueur variable ? Le C++ dispose de std::vectors. Support des nombres complexes/imaginaires ? Le C++ possède un type complexe modélisé. Fonctions mathématiques génératrices de type ? Le C++ surcharge les fonctions mathématiques standard, ce qui donne le même résultat.
Initialisateurs nommés ? Pas en C++, mais il y a une solution de contournement :
struct My_class_params {
int i;
long j;
std::string name;
My_class_params& set_i(int ii)
{
i = ii;
return *this;
}
My_class_params& set_j(long jj)
{
j = jj;
return *this;
}
template <typename STRING>
My_class_params& set_name(STRING&& n)
{
name = std::forward<STRING>(n);
return *this;
}
My_class_params()
{
// set defaults
}
};
class My_class {
My_class_params params;
public:
My_class(const My_class_params& p) : params(p) { }
...
};
Cela vous permet d'écrire des choses comme :
My_class mc(My_class_params().set_i(5).set_name("Me"));
Parce que pour de nombreuses tâches de programmation, le C est plus simple, et suffisamment bon. Lorsque je programme des utilitaires légers, en particulier, j'ai l'impression que le C++ veut que je construise une superstructure élégante pour son propre bien, plutôt que de simplement écrire le code.
Par contre, pour des projets plus complexes, l'élégance fournit plus de rigueur structurelle solide que ce qui sortirait naturellement de mon clavier.