Trong mã của tôi, có lỗi đánh máy: thay vì sử dụng "false"
khi khởi tạo đối tượng std::string
, tôi đã nhập false
(là bool
). Bây giờ điều này không báo cáo bất kỳ lỗi biên dịch nào. Nhưng sau đó trong mã của tôi, khi đối tượng chuỗi này đang được sử dụng, tôi nhận được std::logic_error
trong thời gian chạy. Bất cứ ai có thể vui lòng giải thích, tại sao xây dựng được cho phép trong trường hợp này (nếu không tôi đã nhận được một lỗi biên dịch và tìm thấy vấn đề đó)?loại chuyển đổi nào đang diễn ra khi một giá trị boolean được sử dụng để xây dựng một đối tượng chuỗi?
Dưới đây là một đoạn nhỏ -
#include <iostream>
int main()
{
std::string str = false;
std::cout << str << "\n";
}
Các o/p mà tôi nhận được khi chạy này -
[email protected]~/MYBACKUP=>g++ -o test_string -g test_string.cxx
[email protected]~/MYBACKUP=>./test_string
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct NULL not valid
Aborted
ok. Nhưng không phải điều này đã dẫn đến một lỗi biên dịch thời gian? (thay vì bắt lỗi sau này trong thời gian chạy) – anindita
@anindita: Không. 'false' có thể sử dụng như hằng số con trỏ null (giống như' 0' hoặc 'NULL' nếu bạn' #include ') và một con trỏ rỗng hằng số có thể được sử dụng như một 'const char *', do đó, hàm tạo 'std :: string' sử dụng' const char * 'có thể được sử dụng. –
ok ... cảm ơn lời giải thích. – anindita