sách gpt4 ăn đã đi

c++ - char != (char có dấu), char != (char không dấu)

In lại Tác giả: IT Lão Cao Thời gian cập nhật: 28-10-2023 12:31:32 27 4
mua khóa gpt4 giày nike

Đoạn mã sau biên dịch, nhưng kiểu char hoạt động khác với kiểu int.

đặc biệt

   cout << getIsTrue< isX::ikIsX >() << endl;
cout << getIsTrue< isX::ikIsX >() << endl;
cout << getIsTrue< isX::ikIsX >() << endl;

Kết quả là có 3 mẫu khởi tạo thuộc ba loại: int8, uint8 và char. Cái gì đã cho?

int không giống nhau: int và uint32 dẫn đến việc khởi tạo mẫu giống nhau, được ký bởi một int khác.

Lý do có vẻ là C++ coi char, signature char và unsigned char là ba loại khác nhau. Và int giống như signature int. Điều này có đúng hay tôi đang thiếu một cái gì đó?

#include 

sử dụng không gian tên std;

typedef ký tự có dấu int8;
typedef unsigned char uint8;
typedef có dấu int16 ngắn;
typedef unsigned short uint16;
typedef có dấu int int32;
typedef unsigned int uint32;
typedef có dấu dài dài int64;
typedef unsigned long long uint64;

cấu trúc TrueType {};
cấu trúc FalseType {};

template
cấu trúc isX
{
typedef tên kiểu T::ikIsX ikIsX;
};


// Int==int32 này không rõ ràng
//mẫu <> struct isX { typedef FalseType ikIsX; }; // Không thành công
mẫu <> struct isX { typedef FalseType ikIsX; };
mẫu <> struct isX { typedef FalseType ikIsX; };


// Tại sao điều này không mơ hồ? char==int8
mẫu <> struct isX { typedef FalseType ikIsX; };
mẫu <> struct isX { typedef FalseType ikIsX; };
mẫu <> struct isX { typedef FalseType ikIsX; };


mẫu bool getIsTrue();
mẫu <> bool getIsTrue() { trả về true; }
mẫu <> bool getIsTrue() { trả về false; }

int main(int, char **t )
{
cout << kích thước(int8) << endl; // 1
cout << sizeof(uint8) << endl; // 1
cout << sizeof(char) << endl; // 1

cout << getIsTrue< isX::ikIsX >() << endl;
cout << getIsTrue< isX::ikIsX >() << endl;
cout << getIsTrue< isX::ikIsX >() << endl;

cout << getIsTrue< isX::ikIsX >() << endl;
cout << getIsTrue< isX::ikIsX >() << endl;
cout << getIsTrue< isX::ikIsX >() << endl;

}

Tôi đang sử dụng g++ 4.something

câu trả lời hay nhất

Đây là câu trả lời bạn nhận được từ tiêu chuẩn:

3.9.1 Các kiểu cơ bản [basic.fundamental]

Các đối tượng được khai báo là ký tự (char) phải đủ lớn để lưu trữ bất kỳ thành viên nào của bộ ký tự cơ bản của triển khai. Nếu một ký tự từ bộ này được lưu trữ trong một đối tượng ký tự, giá trị tích phân của đối tượng ký tự đó bằng với giá trị của dạng ký tự đơn của ký tự đó. Việc triển khai xác định xem một char đối tượng có thể giữ các giá trị âm. Các ký tự có thể được khai báo rõ ràng chưa ký hoặc đã ký. Đơn giản char, ký tự đã ký, Và ký tự không dấu có ba loại riêng biệt. MỘT char, Một ký tự đã kývà một ký tự không dấu chiếm cùng một lượng lưu trữ và có cùng các yêu cầu căn chỉnh (cơ bản.các loại); nghĩa là chúng có cùng một biểu diễn đối tượng. Đối với các kiểu ký tự, tất cả các bit của biểu diễn đối tượng đều tham gia vào biểu diễn giá trị. Đối với các kiểu ký tự không dấu, tất cả các mẫu bit có thể có của biểu diễn giá trị đều biểu diễn số. Các yêu cầu này không áp dụng cho các kiểu khác. Trong bất kỳ triển khai cụ thể nào, một char đối tượng có thể có cùng giá trị như một ký tự đã ký hoặc một ký tự không dấu; cái nào được xác định bởi việc triển khai.

Về c++ - ký tự != (ký tự có dấu), ký tự != (ký tự không dấu), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/436513/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress