Vì, và điều này có thể gây sốc, C và C++ là không cùng ngôn ngữ.
C xác định các ký tự chữ cái có loại int
, trong khi C++ coi chúng là loại char
.
Đây là một trường hợp hằng số đa nhân vật có thể hữu ích:
const int foo = 'foo';
Điều đó sẽ tạo ra một số nguyên có giá trị có thể sẽ được 6.713.199 hoặc 7.303.014 tùy theo byte đặt hàng và tâm trạng của trình biên dịch. Nói cách khác, các ký tự nhân vật nhiều ký tự không phải là "di động", bạn không thể phụ thuộc vào giá trị kết quả dễ dự đoán.
Khi người nhận xét đã chỉ ra (cảm ơn!) Điều này có giá trị trong cả C và C++, có vẻ như C++ tạo các ký tự nhân vật đa ký tự thành một loại khác. Tài giỏi!
Ngoài ra, dưới dạng ghi chú nhỏ mà tôi muốn đề cập khi về chủ đề, lưu ý rằng sizeof
không phải là hàm và giá trị của size_t
không phải là int
. Như vậy:
printf("the size of a character is %zu\n", sizeof 'a');
hoặc, nếu trình biên dịch của bạn quá cũ không hỗ trợ C99:
printf("the size of a character is %lu\n", (unsigned long) sizeof 'a');
đại diện cho cách đơn giản nhất và chính xác nhất để in các kích thước bạn đang điều tra.
gì làm cho '1' một câu trả lời có thể chấp nhận hơn' 4'? – Paddyd
@Paddyd Vì 'sizeof (char)' là '1' trong cả C và C++? –
@Paddyd vì kích thước của char là bao nhiêu! Sự khác biệt này không được biết đến với tôi, và vì vậy 1 là rõ ràng – mac93