En C++ estándar como predeterminados a inicializar casi cualquier cosa, incluyendo la matriz:
bool* boolArray = new bool[size](); // Zero-initialized
programa completo que también comprueba el resultado, y desasigna la matriz:
bool foo(int size)
{
bool* boolArray = new bool[size](); // Zero-initialized
// Check that it is indeed zero-initialized:
for(int i = 0; i < size; ++i)
{
if(boolArray[i]) { delete[] boolArray; return false; }
}
delete[] boolArray; return true;
}
#include <iostream>
int main()
{
using namespace std;
cout << (foo(42)? "OK" : "Ungood compiler") << endl;
}
Ya sea que su compilador aceptará o incluso hará lo correcto es otro asunto.
Por lo tanto, en la práctica, si se siente una necesidad irresistible de utilizar una matriz prima, entonces tal vez un mejor uso std::fill
o algo así, o incluso un bucle prima.
Pero tenga en cuenta las repetidas delete[]
-expresiones. Tal código redundante es muy fácil equivocarse: es Evil ™. Y hay muchas otras cosas que pueden salir mal con el uso de matrices en bruto, por lo que, como novato, simplemente diga No ™ en matrices en bruto y punteros sin procesar, etc.
En su lugar, use contenedores de biblioteca estándar, que administran correctamente la asignación, inicialización, copia y desasignación –. Sin embargo, hay un pequeño problema con eso, es decir, una optimización prematura en std::vector<bool>
, que de lo contrario sería la elección natural. Básicamente, std::vector<bool>
usa solo un bit por valor, por lo que no puede distribuir referencias a los elementos bool
, sino que distribuye los objetos proxy & hellip;
Por lo tanto, para bool
elementos, use p. Ej. a std::bitset
(cuando el tamaño se conoce en tiempo de compilación), o p. un std::deque
, de la siguiente manera:.
#include <deque>
bool foo(int size)
{
std::deque<bool> boolArray(size); // Zero-initialized
for(int i = 0; i < size; ++i)
{
if(boolArray[i]) { return false; }
}
return true;
}
#include <iostream>
int main()
{
using namespace std;
cout << (foo(42)? "OK" : "Ungood compiler") << endl;
}
Saludos & HTH,
Se 'bool * boolArray', no' bool boolArray' (que sería sólo un único bool, entonces la asignación de 'new something' no tendría sentido). – ThiefMaster
La primera línea debe ser '... = {falsa};' –