Tại sao một số điện thoại unsigned char
được tự động thăng cấp lên một số int
khi gọi một hàm? Trong ví dụ bên dưới, có một hàm f(int)
và hàm f(char)
. Có vẻ logic hơn là trình biên dịch sẽ ép buộc đối số unsigned char
thành số char
và gọi f(char)
vì chúng có cùng số bit. Nó được gọi là f(int)
thay vào đó, ngay cả khi đó có nghĩa là thúc đẩy các đối số cho một loại với nhiều bit hơn. Bất kỳ con trỏ đến nơi quy tắc được xác định? Tiêu chuẩn hoặc trình biên dịch/nền tảng cụ thể?char chưa được ký tự động được thăng cấp thành int trong cuộc gọi hàm, tại sao?
#include <iostream>
void f(int key)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
void f(char key)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
int main(int argc, char* argv[])
{
int a = 'a';
char b = 'b';
unsigned char c = 'c';
f(a);
f(b);
f(c);
return 0;
}
Tạo đầu ra này:
void f(int)
void f(char)
void f(int)
Tất cả các giá trị có thể có của một 'unsigned char' có thể được biểu diễn bằng' int'. Chúng không thể được biểu diễn bằng một ký tự 'char'. –