Función C ++ con valor predeterminado del parámetro

#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
Inserte la descripción de la imagen aquí
2. Dar el valor por defecto del
Inserte la descripción de la imagen aquí
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
Inserte la descripción de la imagen aquí
diferente
Inserte la descripción de la imagen aquí
, 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.
Inserte la descripción de la imagen aquí

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.

Supongo que te gusta

Origin blog.csdn.net/Gunanhuai/article/details/108629781
Recomendado
Clasificación