Theo C++ Standard (Số tài liệu: N3337 hoặc Số tài liệu: N4296) std::string::npos
được định nghĩa theo cách sau
static const size_type npos = -1;
nơi std :: string :: size_type là một số kiểu dữ liệu integer unsigned. Vì vậy, không có gì tuyệt vời mà std :: string :: npos bằng -1. Trình khởi tạo được chuyển đổi thành tyhpe của std::string::npos
.
Đối với phương trình này
(string::npos == ULONG_MAX) is true,
sau đó nó có nghĩa là loại std::string::npos
đã gõ trong việc thực hiện sử dụng unsigned long
. Loại này thường tương ứng với loại size_t
.
Trong phương trình này
(18446744073709551615 == -1)
hiểu theo nghĩa đen bên trái có một số loại không thể thiếu unsigned đó là thích hợp để lưu trữ như một chữ lớn. Do đó toán hạng bên phải cũng được chuyển đổi thành kiểu unsigned này bằng cách đẩy bit dấu. Khi toán hạng bên trái đại diện cho chính nó giá trị tối đa của loại thì chúng bằng nhau.
Nguồn
2016-11-15 11:07:04
tràn: p bạn so sánh một unsigned và một giá trị ký – Stargateur
Đây không phải là hành vi undefined . – rubenvb
18446744073709551615 = 2^64 -1 ...sự trùng hợp ma quái? – lelloman