cuốn sách gpt4 ai đã làm

Tại sao operator char*() ghi đè operator bool() const trong ngữ cảnh bool?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 02:17:36 25 4
mua khóa gpt4 Nike

Có vẻ như trong c++, trong bối cảnh bool thuần túy,toán tử*() 的优先级高于 toán tử bool() const; và bật chế độ c++11 và sử dụng toán tử rõ ràng bool() const Không hữu ích. Đây có phải là lỗi trong g++ hay lỗi trong tiêu chuẩn ngôn ngữ không? Hay tôi không thấy lý do chính đáng cho sự điên rồ này?

Trình bày đơn giản về vấn đề:

#include 

cấu trúc A
{
char buf[512];
int lỗi;

toán tử char* () { return buf }
toán tử const char* () const { return buf }
toán tử bool () const { return !err }
// toán tử rõ ràng bool () const { return !err } // cùng một vấn đề
};

int main()
{
Một;
a.err = -42;
nếu (a) {
printf("lolwut?\n");
return 1;
}
return 0;
}

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

Như @oakad đã giải thích - giải pháp tao nhã là sử dụng ở chế độ c++11 toán tử rõ ràng char*(). Điều này sẽ đảm bảo toán tử*() Sẽ không được sử dụng trong bối cảnh bool.

作为giải thích bởi @bolov - Hành vi được quan sát là một phần của tiêu chuẩn ngôn ngữ. Theo 13.3.1, các phương thức được coi là có các tham số đối tượng ngầm nhằm mục đích giải quyết các hàm bị quá tải. Đối với các phương thức được khai báo không có vòng loại ref, tham số này là tham chiếu đến lớp có vòng loại cv tương ứng.

Vì vậy, chúng tôi thực sự có tình huống sau:

char* op(A& a) { return a.buf }
bool op(const A& a) { return !a.err }

由于Một hiện hữuchủ yếu() đúng và saiconst,KHÔNGconst toán tử được chọn. chúng ta có toán tử*() hoặc toán tử int() hoặc toán tử kép() Không quan trọng - không const Các toán tử ép kiểu có thể được sử dụng trong ngữ cảnh bool có độ ưu tiên cao hơn toán tử bool() const.

Giới thiệu về c++ - Tại sao operator char*() ghi đè operator bool() const trong ngữ cảnh bool? , 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/23356491/

25 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