#include<iostream>
int sum(int a, int b)
{
return a + b;
}
int main()
{
int a = 10;
int b = 20;
int ret = sum(a, b);
std::cout << "ret:" << ret << std::endl;
return 0;
}
La definición de función de suma puede tener los siguientes tipos:
int sum(int a=10,int b=20);
sum();
int sum(int a,int b=20);
sum(a);
Pero int sum (int a, int b = 20) ; no se puede compilar, la razón es que la función push se inserta en la pila de derecha a izquierda, y el valor predeterminado se da de derecha a izquierda.
Llamada de función
int sum(int a=10, int b=10)
{
return a + b;
}
int main()
{
int a = 10;
int b = 20;
int ret = sum(a,b);
//mov eax,dword ptr[ebp-8]
//push eax
//mov ecx,dword ptr[ebp-4]
//push ecx
//call sum
std::cout << "ret:" << ret << std::endl;
//push 14H
//mov ecx,dword ptr[ebp-4]
//push ecx
//call sum
ret = sum(a);
//push 14H
//push 0Ah
//call sum
return 0;
}
¿Se ha mejorado la eficiencia de las funciones de llamada con valores predeterminados para parámetros formales y funciones ordinarias? La
respuesta esTener, Pero la eficiencia en casos individuales será la misma que antes, pero la eficiencia no disminuirá.
int ret = sum(a,b);
//mov eax,dword ptr[ebp-8]
//push eax
//mov ecx,dword ptr[ebp-4]
//push ecx
//call sum
Cuando se da el valor predeterminado
int ret = sum(a,40);
//push 28H
//mov ecx,dword ptr[ebp-4]
//push ecx
//call sum
Se puede observar claramente que la segunda parte de código ejecuta una instrucción mov menos que la primera parte de código, y la eficiencia se mejora naturalmente.
¿Dónde se puede dar el valor predeterminado de la función?
1. Dar el valor por defecto del parámetro formal durante la declaración
2. Dar el valor por defecto del
parámetro formal durante la definición Cuando el parámetro recibe el valor por defecto, ¿se puede repetir? En otras palabras, ¿qué sucede si da el mismo valor predeterminado varias veces?
El mismo valor predeterminado es
diferente
, por lo tanto, cuando un parámetro recibe un valor predeterminado, ya sea definido o dado, el valor predeterminado del parámetro solo puede aparecer una vez, incluso si el valor predeterminado es el mismo.
Cuando el compilador ejecuta el código, se ejecuta secuencialmente de arriba a abajo, y el valor predeterminado se da de derecha a izquierda, por lo que también es posible la siguiente forma de inicializar el valor predeterminado.
Resumen: La
función
1 con valores predeterminados para parámetros formales se da de derecha a izquierda cuando se dan valores predeterminados;
2. Se mejora la eficiencia de llamar a funciones con valores predeterminados para parámetros formales y funciones ordinarias, pero la eficiencia en casos individuales será la misma que antes, pero La eficiencia no disminuirá;
3. Los lugares de definición y declaración pueden dar el valor predeterminado del parámetro formal;
4. Cuando el parámetro formal recibe el valor predeterminado, ya sea definido o dado, el valor predeterminado del parámetro formal solo puede aparecer una vez, incluso si El valor predeterminado es el mismo.