A kullanarak std :: string'in NULL const char * ile hatalı başlatılmasını algılayabilen herhangi bir g ++ seçeneği var mı?Hatalı std :: string initialization ile NULL const char * kullanarak g ++
Ben std :: string olanları içine bazı int alanları dönüm sürecinde, yani oldu: ...
struct Foo
{
int id;
Foo() : id(0) {}
};
dönüştü: Tamamen kötü 'kimlik' gözden kaçan
struct Foo
{
std::string id;
Foo() : id(0) {} //oooops!
};
0 ve g ++ ile başlatma, bana hiç uyarı vermedi. Bu hata çalışma zamanında tespit edildi (std :: string constructor bir istisna attı) ama derleme zamanında böyle şeyleri tespit etmek isterim. Herhangi bir yol var mı?
Ne yazık ki, 0, int'den işaretçiye geçersiz bir dönüşüm için bir hata tetiklemeyen bir değerdir. Elbette 0 sıfır boş bir işaretçi sabit olduğundan, herhangi bir işaretçi türüne dönüştürülebilir. Ziyaretçinin söylediği gibi, baştan başlatabilmek için yapabileceğiniz şeyden başka bir şey bilmiyorum. –
Uygun çözüm, özel bir kurucu 'std :: string :: string (int); Bu daha iyi bir eşleşme olur ve bu nedenle bir derleme zamanı hatasına neden olur. – MSalters
Bu şekilde kastettiğinizden emin değilsiniz, ancak aslında bu, 'int''den' string''e yapılan bu değişiklikten kaynaklanan hataları yakalamak için bir kerelik bir test olarak işe yarayabilir. G ++ standart başlıklarında std :: basic_string işlevini değiştirin, yeni kodun derlendiğini, ardından hızlı bir şekilde herkesin fark etmediğini kontrol edin. –