vectores usuario una subprogramas por pasar parametro matriz funciones funcion estructuras ejercicios con como c++ arguments

usuario - vectores c++



C++ Argumento predeterminado para el vector<int> &? (5)

Has probado:

void test(const vector<int>& vec = vector<int>());

C++ no permite que los temporales estén vinculados a referencias no constantes.

Si realmente necesita tener un vector<int>& (no uno const ), puede declarar una instancia estática y usarla como un valor predeterminado (por lo tanto, no temporal).

static vector<int> DEFAULT_VECTOR; void test(vector<int>& vec = DEFAULT_VECTOR);

¡Pero cuidado, porque DEFAULT_VECTOR será modificado y no se reiniciará en cada llamada! No estoy seguro de que esto es lo que realmente quieres.

Gracias a stinky472 , aquí hay una alternativa segura para subprocesos:

En lugar de proporcionar un valor predeterminado, también podría sobrecargar la test() con una versión de cero parámetros que llama a la otra versión:

void test() { vector<int> vec; test(vec); }

Tengo una función,

void test( vector<int>& vec );

¿Cómo puedo establecer el argumento predeterminado para vec? Yo he tratado

void test( vector<int>& vec = vector<int>() );

Pero hay una advertencia "extensión no estándar utilizada: ''argumento predeterminado'': conversión de ''std :: vector <_Ty>'' a ''std :: vector <_Ty> &''"

Hay una mejor manera de hacer esto ? En lugar de

void test() { vector<int> dummy; test( dummy ); }

Saludos, Voteforpedro


Me parece cuestionable que un argumento de referencia no const tenga un valor predeterminado. ¿Qué se supone que significa esto?

Comúnmente, una función que toma una referencia no const significa "podría cambiar el argumento". Si el argumento es opcional, ¿por qué no se pasa un puntero (no const )? De esa manera, cuando las personas que llaman no quieren pasar un argumento, pueden pasar NULL .
(Consulte here para obtener más información sobre cómo pasar argumentos de función).

Edit: Bueno, y por supuesto, también hay sobrecarga . Solo agrega otra sobrecarga que no tome este argumento.


No podemos inicializar referencias mutables a los temporales. Sólo las referencias const permiten esto. Lo que buscas es lo más probable:

void test( const vector<int>& vec = vector<int>() );

Aparte de evitar un comportamiento indefinido, esto tiene más sentido lógicamente y desde una perspectiva de corrección constante. Si quisiera que ''prueba'' modificara el vector original que se le pasa, no habría podido proporcionar sensiblemente un valor predeterminado. Por lo tanto, es obvio que está utilizando ''vec'' aquí con fines de solo lectura y, por lo tanto, debe ser una referencia constante.


Puede simplemente pasar un puntero a un vector e inicializarlo en NULL

void test( vector<int>* vec = NULL );


Sé que esta pregunta se hizo en 2010, pero para C ++ 11 puede hacerlo de la siguiente manera:

void test( vector<int>& vec = {}) { // Awesome code here }

Como se señala en esta respuesta .