Redefinición del parámetro predeterminado en C++

Syed Hassan Sabeeh Kazmi 12 octubre 2023
  1. Especifique argumentos en la Declaración de función para manejar la redefinición del error de parámetro predeterminado en C++
  2. Especifique argumentos en la Definición de función para manejar la redefinición del error de parámetro predeterminado en C++
Redefinición del parámetro predeterminado en C++

En este tutorial, aprenderá a manejar la redefinición de errores de parámetro predeterminado en C++. Los argumentos predeterminados en C++ deben especificarse en la declaración o definición del método o de la función, pero no en ambos debido a la duplicación.

Especifique argumentos en la Declaración de función para manejar la redefinición del error de parámetro predeterminado en C++

Lo que causa la redefinición del error de parámetro predeterminado es su redefinición en el archivo de encabezado, que se invocará cada vez desde un archivo principal y conduce a redefinir la función o el método varias veces.

Sin embargo, puede agregar argumentos predeterminados en declaraciones posteriores de una función (o método) en el mismo ámbito para funciones (o métodos) que no sean de plantilla. Las declaraciones tienen conjuntos completamente distintos de argumentos predeterminados en diferentes ámbitos.

Cada parámetro después de un parámetro con un argumento predeterminado tendrá un argumento predeterminado proporcionado, una declaración previa o un paquete de parámetros de función en una declaración de función determinada. El error de redefinición de parámetro predeterminado ocurre cuando establece parámetros predeterminados en la definición (implementación), no solo en la declaración.

Ejemplo de código:

#include <iostream>

// to process variables whenever called
void print(int x, int y) {
  std::cout << "x: " << x << '\n';  // x output
  std::cout << "y: " << y << '\n';  // y output
}

int main() {
  // function declaration
  void print(int x, int y = 3);

  print(7, 4);  // in this case, `y` is user-defined variable hence default
                // argument will be neglected
  print(6);  // in this case, `y` has no user-defined value hence, it will use
             // default argument
}

Producción :

x: 7
y: 4
x: 6
y: 3

Si hay más de un parámetro en su función (o método), aquellos que están predeterminados deben enumerarse después de todos los parámetros no predeterminados como void my_function (int a, char b);.

En C++, los argumentos predeterminados no provocan directamente errores de los parámetros booleanos, pero estos argumentos empeoran sus efectos perniciosos y, como resultado, los errores booleanos se vuelven extremadamente complejos de manejar.

Especifique argumentos en la Definición de función para manejar la redefinición del error de parámetro predeterminado en C++

Una llamada de función puede recuperar los argumentos de cualquier parámetro de función de la persona que llama si alguno de los parámetros de la función tiene un argumento predeterminado y, en caso de que la persona que llama no proporcione un argumento, se usa el valor del argumento predeterminado de ese parámetro en particular. . Una vez declarado, un argumento predeterminado no se puede volver a declarar debido a la duplicación, lo que significa que los argumentos predeterminados se pueden declarar en una definición de función.

La declaración directa de un parámetro predeterminado es una de las mejores prácticas para declarar un argumento predeterminado en lugar de declararlo en la definición de la función.

Ejemplo de código:

#include <iostream>

void print(int x, int y = 4)  // 4 is the default argument
{
  std::cout << "x: " << x << '\n';
  std::cout << "y: " << y << '\n';
}

int main() {
  print(1, 2);  // y will use user-supplied argument 2
  print(3);     // y will use default argument 4
}

// in case of multiple default arguments
void printmulti(int x = 10, int y = 20, int z = 30) {
  std::cout << "x: " << x << '\n';
  std::cout << "y: " << y << '\n';
  std::cout << "z: " << z << '\n';
}

Producción :

x: 1
y: 2
x: 3
y: 4

Un argumento predeterminado aparece sintácticamente en una declaración de función (o método), pero el argumento predeterminado en sí mismo se comporta como una definición en la que debe haber solo uno por unidad de traducción. No puede repetir el valor del argumento predeterminado en la definición de la función, lo que significa que una parte de la interfaz de la función es invisible en el sitio de su implementación.

La definición del argumento predeterminado en un lugar y la evaluación en otro genera confusión sobre los aspectos de C++ en el medio, como la búsqueda de nombres, el control de acceso y la creación de instancias de plantillas.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub

Artículo relacionado - C++ Function