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

Phân rã mảng thành con trỏ và độ phân giải quá tải

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 15:41:06 31 4
mua khóa gpt4 Nike

Tôi muốn có thể phân biệt giữa mảng và con trỏ ở độ phân giải quá tải:

chuỗi lớp {
public:
chuỗi(const char* c_str);

mẫu
chuỗi(const char (&str) [N]);
};


int chính() {
const char* c_str = "foo";
string foo(c_str); // ok sẽ gọi string(const char*)

string bar("bar"); // gọi string(const char*) thay vì phiên bản mảng
}

Cách tốt nhất tôi tìm thấy cho đến nay là sử dụng tham chiếu đến con trỏ thay vì con trỏ:

chuỗi lớp {
public:
chuỗi(const char*& c_str);

mẫu
chuỗi(const char (&str) [N]);
};


int chính() {
const char* c_str = "foo";
string foo(c_str); // ok sẽ gọi string(const char*)
string bar("bar"); // ok, sẽ gọi phiên bản mảng
}

Điều này không hoàn toàn giống nhau, tôi tự hỏi liệu có cách nào tốt hơn không

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

Khi cả hai đều có thể, bạn cần biến tình trạng quá tải đầu tiên thành một lựa chọn tồi. Hiện tại, chúng đang bằng nhau trong bảng xếp hạng tỷ lệ chuyển đổi (cả hai đều "kết hợp chính xác"), nhưng sự hòa sau đó đã bị phá vỡ do ưu tiên các mẫu không phải mẫu.

Điều này sẽ làm cho thứ hạng chuyển đổi trở nên tồi tệ hơn:

cấu trúc stg
{
struct cvt { const char* p; cvt(const char* p_p) : p(p_p) {} };

// khớp với const char*, nhưng không được ưa chuộng khi xếp hạng quá tải
stg(cvt c_str); // sử dụng c_str.p bên trong :( Hoặc thêm một chuyển đổi ngầm định

mẫu
stg(const char (&str) [N]);
};

Về c++ - phân rã mảng thành con trỏ và độ phân giải quá tải, 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/21972652/

31 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