Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Directives d'utilisation du C++

Justification

Depuis Godot 4.0, le standard C++ utilisé dans toute la base de code est un sous-ensemble de C++17. Bien que le C++ moderne apporte de nombreuses possibilités d'écrire un code plus rapide et plus lisible, nous avons choisi de restreindre notre utilisation du C++ à un sous-ensemble pour quelques raisons :

  • Cela facilite la révision du code dans les éditeurs en ligne. En effet, les contributeurs du moteur n’ont pas toujours accès à un IDE complet pour réviser le code.

  • Cela rend le code plus facile à appréhender pour les contributeurs débutants (qui ne sont pas forcément des programmeurs C++ professionnels). La base de code de Godot est connue pour être facile à apprendre, et nous aimerions qu'il en reste ainsi.

To get your pull request merged, it needs to follow the C++ usage guidelines outlined here. Of course, you can use features not allowed here in your own C++ modules or GDExtensions.

Note

Avant Godot 4.0, la norme C++ utilisée dans l'ensemble de la base de code était C++03, avec une poignée d'extensions C++14. Si vous contribuez à une pull request sur la branche 3.x plutôt que sur la branche master, votre code ne peut pas utiliser les fonctionnalités C++17. Au contraire, votre code doit pouvoir être compiler avec un compilateur C++14.

Les directives ci-dessous ne s'appliquent pas aux dépendances de tiers, bien que nous favorisions généralement les petites bibliothèques plutôt que les solutions plus importantes. Voir aussi Bonnes pratiques pour les contributeurs au moteur.

Voir aussi

Voir Lignes directrices pour le style du code pour les directives de formatage.

Fonctionnalités non autorisées

Toute fonctionnalité non listée ci-dessous est autorisée. L'utilisation de fonctionnalités telles que constexpr variables et nullptr est encouragée lorsque cela est possible. Cependant, essayez de rester prudent dans votre utilisation des fonctionnalités modernes du C++. Leur utilisation doit servir un objectif réel, comme l'amélioration de la lisibilité ou des performances du code.

Standard Template Library

Nous ne permettons pas l'utilisation de la STL car Godot fournit ses propres types de données (entre autres choses). Voir Pourquoi Godot n'utilise pas la STL (Standard Template Library) ? pour plus d'informations.

Cela signifie que les pull requests ne doivent utiliser non std::string, std::vector et autres. Au lieu de cela, utilisez les types de données de Godot comme décrit ci-dessous :

  • Utilisez String au lieu de std::string.

  • Utilisez Vector au lieu de std::vector. Dans certains cas, LocalVector peut être utilisé comme alternative (demandez d'abord aux développeurs du noyau).

  • Utilisez Array au lieu de std::array.

Note

Godot possède également un type de données List (qui est une liste liée). Bien que List soit déjà utilisé dans la base de code, il est généralement moins performant que d'autres types de données comme Vector et Array. Par conséquent, List devrait être évité dans le nouveau code, sauf si nécessaire.

Mot-clé auto

Veuillez ne pas utiliser le mot-clé auto pour l’inférence de type. Bien que cela puisse éviter la répétition, cela peut également conduire à un code déroutant :

// Not so confusing...
auto button = memnew(Button);

// ...but what about this?
auto result = EditorNode::get_singleton()->get_complex_result();

Gardez à l'esprit que la documentation sur le survol n'est pas toujours disponible pour les réviseurs des demandes de retrait. La plupart du temps, les réviseurs utilisent la visionneuse en ligne de GitHub pour examiner les demandes de retrait.

Nous avons choisi d'interdire auto au lieu de l'autoriser au cas par cas pour éviter d'avoir à trancher sur des cas limites difficiles. Nous vous remercions de votre compréhension.

Lambda

Les lambdas doivent être utilisés de manière conservatrice lorsqu'ils rendent le code effectivement plus rapide ou plus simple, et qu'ils ne nuisent pas à la lisibilité. Veuillez demander avant d'utiliser des lambdas dans une pull request.

Directive #pragma once

Pour respecter le style existant, veuillez utiliser les gardes d'inclusion standard #ifdef au lieu de #pragma once dans les nouveaux fichiers.

Voir aussi

Voir L'en-tête comprend pour des directives sur le tri des includes dans les fichiers C++ et Objective-C.