Tôi đã gặp phải một tình huống thú vị hôm nay trong một chương trình mà tôi vô tình gán một số nguyên không dấu vào một chuỗi std ::. Trình biên dịch Visual Studio C++ không đưa ra bất kỳ cảnh báo hoặc lỗi nào về nó, nhưng tôi đã tình cờ nhận ra lỗi khi tôi chạy dự án và nó đã cho tôi các ký tự rác cho chuỗi của tôi.Tại sao C++ cho phép một số nguyên được gán cho một chuỗi?
Đây là loại gì mã trông giống như:
std::string my_string("");
unsigned int my_number = 1234;
my_string = my_number;
Các mã sau đây cũng biên dịch tốt:
std::string my_string("");
unsigned int my_number = 1234;
my_string.operator=(my_number);
Kết quả sau một lỗi:
unsigned int my_number = 1234;
std::string my_string(my_number);
gì đang diễn ra? Làm thế nào đến trình biên dịch sẽ ngừng xây dựng với khối mã cuối cùng, nhưng để cho 2 khối mã đầu tiên xây dựng?
Lỗi trình biên dịch là gì? Đối với tôi, g ++ v4.4 biên dịch và hoạt động chính xác – CsTamas
Tôi xin lỗi, tôi đã phạm sai lầm với khối mã thứ 2 - nó biên dịch. Điều cuối cùng không thành công với một lỗi về việc không có một std :: string constructor chấp nhận một unsigned int. – user55417