İster
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;
}
senin derleyici doğru şeyi kabul eder, hatta yapar.
Yani, uygulamada, eğer bir ham dizi kullanmaya karşı konulmaz bir dürtü hissediyorum, o zaman belki daha iyi std::fill
ya da bazı tür, hatta çiğ döngü kullanın.
Ancak yinelenen delete[]
ifadelerini not edin. Bu gereksiz kodun yanlış olması çok kolaydır: Kötü ™. Ve işlenmemiş dizilerin kullanımı ile yanlış gidebilecek başka bir şey var, bu yüzden bir acemi olarak, sadece ™ numaralarını ham dizilere ve ham işaretlere ve benzerlerine bildirin. Bunun yerine, – doğru şekilde sizin için tahsis, başlatma, kopyalama ve serbest ayırmayı yöneten standart kitaplık kaplarını kullanın. Bununla birlikte, küçük bir problem var, yani, std::vector<bool>
'da, aksi takdirde doğal seçim olan erken bir optimizasyon. Aslında, std::vector<bool>
değeri, değer başına yalnızca bir bit kullanır, böylece bool
öğelerine yapılan başvurular dağıtılmaz, bunun yerine proxy nesneleri ve hellip;
bool
öğeleri için, örn. std::bitset
(boyut derleme zamanında biliniyorsa) veya ör. Bir std::deque
, aşağıdaki gibi:.
#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;
}
Şerefe & hth,
O 'bool * boolArray' değil' bool boolArray' (yani sadece tek olurdu oluyor bool, yani 'yeni bir şey' atama bile mantıklı olmazdı. – ThiefMaster
İlk satır '... = {false}; –