Pregunta

Soy nuevo en C++, ¿podría explicarme por qué/cuándo debo usar esto?

int & MyArray::operator[] (const int i)
{
    return arr[i];
}

en lugar de esto

int & MyArray::operator[] (int i)
{
    return arr[i];
}
¿Fue útil?

Solución

¡No hace una gran diferencia!

A algunas personas les gusta tratar los parámetros como inmutables, por lo que los marcan como const.En este caso es una cuestión de estilo.

Otros consejos

en una función declaración, no hace ninguna diferencia, porque el nivel superior consts son ignorados.

Estas dos son en realidad la misma declaración y por esa razón, nivel superior const En los parámetros de función se debe evitar:

void foo(int);
void foo(const int); // re-declaration of above function

en una función definición, significa que no puedes cambiar la copia del argumento en tu función:

void foo(int i) { i++; } // OK
void foo(const int i) { i++; } // Error

Por lo tanto, se puede utilizar como un artefacto de implementación para expresar que la variable local es const.Esto le da al compilador más posibilidades para realizar optimizaciones.

no hagas esto.Es idéntico a la perspectiva de la persona que llama y solo agrega ruido visual.

El parámetro GENACODICETAGODOTE se pasa por valor y es un tipo de datos simple, se copia, por lo que cuando lo marca como i, le está diciendo al compilador que no puede cambiar dentro del método, pero como es una copia.t Importante en absoluto, y en este ejemplo específico, solo lo está utilizando como un índice.

Ambos formas son correctas.Use el primero si desea asegurarse de que el parámetro "I" no se modifique en la función, lo que puede ser útil si la función es más larga / más complicada. Sin embargo, en la Declaración del Operador no usa Const:

int& operator[](int i);

Es legal tener declaración sin const, y definición con ella.

Como regla general, cualquier cosa que no tenga la intención de modificar debe ser const

If you not trying to edit your parameter then its better to use const.

As far as performance is concerned not much difference. But it safeguards your parameter from editing (accidentally) inside function.

int & MyArray::operator[] (const int i)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top