Spotkałem dzisiaj interesującą sytuację w programie, w którym nieumyślnie przypisałem liczbę całkowitą bez znaku do std :: string. Kompilator VisualStudio C++ nie dawał żadnych ostrzeżeń ani błędów na jego temat, ale zdarzyło mi się zauważyć błąd, który wystąpił podczas uruchamiania projektu i dał mi niepotrzebne znaki dla mojego ciągu.Dlaczego C++ pozwala na przypisanie liczby całkowitej do ciągu?
To niby co kod wyglądało:
std::string my_string("");
unsigned int my_number = 1234;
my_string = my_number;
Poniższy kod kompiluje również dobrze:
std::string my_string("");
unsigned int my_number = 1234;
my_string.operator=(my_number);
następujące wyniki w błąd:
unsigned int my_number = 1234;
std::string my_string(my_number);
Co trwa? Jak to możliwe, że kompilator zatrzyma kompilację z ostatnim blokiem kodu, ale niech zbudują pierwsze 2 bloki kodu?
Jakie są błędy kompilatora? Dla mnie g ++ v4.4 kompiluje się i działa poprawnie – CsTamas
Przykro mi, popełniłem błąd z drugim blokiem kodu - to się kompiluje. Ostatni z nich kończy się niepowodzeniem z błędem dotyczącym braku konstruktora std :: string, który akceptuje unsigned int. – user55417