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

Chúng ta có cần thêm tiền tố vào các tham số thành viên của các kiểu lồng nhau bằng "::" không?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 07:57:20 27 4
mua khóa gpt4 Nike

Ví dụ: hãy xem xét trường hợp sau đây khi tên xung đột tổ 1 :

mẫu  lớp Nest1 {};

lớp cls {
public:
mẫu lớp Nest1 {};

mẫu lớp Nest2 {
public:
thanh void(nest1 x);
};
};

mẫu
void cls::nest2::bar(nest1 x) {} // làm cách nào trình biên dịch biết tổ <1> nào?
  • Làm thế nào trình biên dịch biếtthanhNó có tồn tại không? nhu cầu tổ1hoặc cls::nest1nếu chúng ta không sử dụng cls:: dưới dạng tiền tố (ví dụ: thanh(cls::nest1 x))?
  • tiền tố rõ ràng cls:: Đó có phải là một thói quen tốt? Dẫu sao thì?

LƯU Ý: Trình biên dịch thực sự chọn khai báo ngầm thanh(cls::nest1 x) :

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

Mỗi tên được sử dụng sau tên hàm thành viên cũng được tra cứu trong phạm vi từ vựng của lớp của nó. Điều này dẫn đến hành vi (dường như) không nhất quán sau đây do kiểu trả về thông thườngKHÔNGTrong phạm vi từ vựng của lớp:

cấu trúc X{
cấu trúc Y{};

Y foo(Y);
thanh Y(Y);
};

// kiểu trả về bình thường là trước 'foo', cần xác định phạm vi rõ ràng
// tham số không có (sau 'foo')
X::YX::foo(Y y){ return y }

// Trailing-return-type cũng không có (sau 'bar')
auto X::bar(Y y) -> Y{ return y }

Về các tiêu chuẩn về vấn đề này, chúng tôi xem xét§9.3 [class.mfct] p5:

Nếu định nghĩa của hàm thành viên về mặt từ vựng nằm ngoài định nghĩa lớp của nó thì tên hàm thành viên sẽ được xác định theo tên lớp của nó bằng cách sử dụng :: toán tử.[ Ghi chú: Tên được sử dụng trong định nghĩa hàm thành viên (nghĩa là trong mệnh đề khai báo tham số bao gồm các đối số mặc định (8.3.6) hoặc trong thân hàm thành viên) được tra cứu như mô tả trong 3.4. —ghi chú cuối ] […]

sau đó vào §3.4.1 [basic.lookup.unqual] p8(tra cứu tên không đủ tiêu chuẩn, ví dụ: không có ::):

Tên được sử dụng trong định nghĩa hàm thành viên (9.3) của lớp X theo chức năng của người khai báo-id31 ... sẽ được khai báo theo một trong các cách sau:

  • […]
  • sẽ là thành viên của lớp X hoặc là thành viên của một lớp cơ sở của X (10.2), hoặc
  • […]

(Trong ví dụ của tôi,id khai báo Đúng foothanh。)

Về c++ - Chúng ta có cần thêm tiền tố vào các tham số thành viên của các kiểu lồng nhau bằng "::" không? , 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/16493015/

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