Up to date

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

Directrices de uso para C++

Fundamentos

Desde Godot 4.0, el estándar de C++ utilizado en todo el código es un subconjunto de C++17. Aunque C++ moderno ofrece muchas oportunidades para escribir código más rápido y legible, decidimos restringir nuestro uso de C++ a un subconjunto por algunas razones:

  • Esto facilita la revisión del código en editores en línea. Esto se debe a que los colaboradores del motor no siempre tienen acceso a un IDE completo mientras revisan el código.

  • Esto hace que el código sea más fácil de comprender para los colaboradores principiantes (que pueden no ser programadores profesionales de C++). La base de código de Godot es conocida por ser fácil de aprender, y queremos mantenerla de esa manera.

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.

Nota

Antes de Godot 4.0, el estándar de C++ utilizado en todo el código era C++03, con algunas extensiones de C++14. Si estás contribuyendo con una solicitud de extracción (pull request) a la rama 3.x en lugar de master, tu código no puede usar características de C++17. En su lugar, tu código debe poder compilarse con un compilador de C++14.

Las pautas a continuación no se aplican a las dependencias de terceros, aunque generalmente preferimos bibliotecas pequeñas en lugar de soluciones más grandes. Consulta también Meojres practicas para los contribuyentes al motor.

Ver también

Consulta Directrices de estilo de código para obtener las directrices de formato.

Funciones no permitidas

Cualquier característica no mencionada a continuación está permitida. Se recomienda el uso de características de C++ moderno, como variables constexpr y nullptr, cuando sea posible. Sin embargo, intenta mantener el uso de características modernas de C++ de manera conservadora. Su uso debe tener un propósito real, como mejorar la legibilidad o el rendimiento del código.

Biblioteca de plantillas estándar (STL)

No permitimos el uso de la STL ya que Godot proporciona sus propios tipos de datos (entre otras cosas). Consulta ¿Por qué Godot no usa STL (Standard Template Library)? para obtener más información al respecto.

Esto significa que las solicitudes de extracción (pull requests) no deben utilizar std::string, std::vector u otros tipos de la STL. En su lugar, se deben utilizar los tipos de datos de Godot, como se describe a continuación:

  • Utiliza String en lugar de std::string.

  • Utiliza Vector en lugar de std::vector. En algunos casos, LocalVector puede ser utilizado como una alternativa (consulta primero con los desarrolladores principales).

  • Utiliza Array en lugar de std::array.

Nota

Godot también tiene un tipo de dato llamado List (que es una lista enlazada). Aunque List ya se utiliza en el código, generalmente tiene un rendimiento inferior a otros tipos de datos como Vector y Array. Por lo tanto, se debe evitar el uso de List en código nuevo a menos que sea necesario.

Palabra clave auto

Por favor, no utilices la palabra clave auto para la inferencia de tipos. Aunque puede evitar la repetición, también puede llevar a un código confuso:

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

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

Ten en cuenta que la documentación emergente (hover documentation) a menudo no está disponible de manera fácil para los revisores de las solicitudes de extracción.

Hemos decidido prohibir el uso de auto en lugar de permitirlo caso por caso para evitar tener que decidir en situaciones difíciles. Gracias por tu comprensión.

Lambdas

Se deben utilizar lambdas con moderación, solo cuando hagan que el código sea efectivamente más rápido o más simple, y no afecten la legibilidad. Por favor, consulta antes de usar lambdas en una solicitud de extracción.

directiva #pragma once

Para seguir el estilo existente, utiliza guardias de inclusión basados en #ifdef en lugar de #pragma once en nuevos archivos.

Ver también

Consulta Incluciones de encabezado para obtener directrices sobre la ordenación de las inclusiones en archivos de C++ y Objective-C.