2011-06-18 16 views

Respuesta

11

const correctness es más de dejar que el compilador lo ayude a evitar cometer errores honestos. Declarar la consistencia de un parámetro es solo otra forma de seguridad de tipo en lugar de un impulso para el rendimiento.

La mayor parte del compilador moderno podrá detectar si una variable es realmente constante o no, y aplicar las optimizaciones correctas. Por lo tanto, no use const-correctness para razones de rendimiento. más bien utilizarlo para razones mantenibilidad & prevenir a sí mismo de hacer errores estúpidos.

+0

He dejado de preguntar la Q '¿por qué downvote?', Pero sería bueno saber el argumento contrario para hacerlo en este caso particular. –

+1

Argumento del contador: menos tipeo. Pero dado que todos aquí están defendiendo fuertemente el argumento de 'const'ing siempre que sea posible para evitar errores estúpidos, es una defensa muy pobre. – Pieter

+2

@Pieter: "menos tipeo" es * nunca * un contra argumento cuando se argumenta en contra de la claridad y se refleja su intención. – Xeo

8

espero que usted es consciente de que en términos de función Declaraciones estos dos son idénticos , es decir que cuentan la misma función !!!

Ahora, en cuanto a las definiciones que van, no puedo decir si hay cualquier impulso en absoluto, pero puedo prometer que no hay significativa impulso. No creo que los compiladores modernos sean estúpidos. La mayoría de ellos son más inteligentes que usted y yo.))

Hay otro lado. Algunos programadores prefieren añadir const donde es aplicable dada, la verdadera const-corrección. Este es un punto de vista y práctica válidos. Pero, de nuevo, no lo haría solo por problemas de rendimiento.

+3

[Prueba] (http://codepad.org/Ak68YcdF) para su primera declaración. –

+0

@Tomalak: Gracias :) –

-1

Esto probablemente depende del compilador y de la naturaleza de la función, no hay espacio para la optimización. Si piensas en la tarea del compilador de elegir cuándo usar los registros de la CPU y qué instrucciones de carga usar, no puedo encontrar ningún caso de uso en el que saber que un parámetro es const permitirá al compilador optimizar el código.

Sin embargo, todavía debe usar const en sus declaraciones de funciones. Se auto documenta y permite que otros conozcan la naturaleza de los parámetros. También, puede ser que le impide hacer algo sin querer con una variable:

void addNumbers(const int num1, const int num2) 
{ 
    ... 
    num1++; // you really didn't mean to do this! 
} 
+0

Indeed. Use 'const' excepto cuando necesite modificar algo. ¡A diferencia de "use' const' cuando no necesitas modificar algo "! –

+1

¿Por qué debería la declaración de función determinar cómo se implementará la función? Digamos que por alguna razón quiere usar uno de los parámetros como contador y disminuirlo en un bucle. En ese caso, debe cambiar la declaración de la función, y creo que no tengo que explicar por qué eso es malo. – aerkenemesis

0

Esto sería micro-optimización en el mejor; mal en el peor.

No te molestes con ideas como esta.

Si no va a cambiar el valor, use const. Y seguir adelante.

0

Usted puede estar pensando en algo como esto:

void foo(vector<int> large_object) 

vs

void foo(const vector<int>& large_object) 

El segundo caso puede ser más rápido debido a que el compilador sólo empujará una referencia en la pila. En el primer caso, se empujará todo el vector.

Cuestiones relacionadas