Tôi không nghĩ rằng làm cho nhà điều hành & riêng tư sẽ làm điều đó, có cách hợp pháp để làm điều này không.
Không, vì số &
bạn sử dụng trong chữ ký chức năng để chuyển qua tham chiếu không phải là toán tử. Bạn đang nói về địa chỉ của toán tử (unary) hoặc bitwise-and operator (binary). Vì vậy, nó không có gì để làm với pass-by-tham khảo.
Không có cách nào để không cho phép tham chiếu theo từng loại cho một loại.
tôi nghi ngờ động lực của bạn là đủ mạnh để làm điều này, và bạn dường như có một sự hiểu biết xấu của cơ chế qua:
Nếu bất kỳ chức năng cố gắng để nhận được nó bằng cách tham khảo, tôi muốn nó để cung cấp cho lỗi biên dịch (lý tưởng) hoặc lỗi thời gian chạy.
Một hàm hoặc chuyển tham số theo tham chiếu hoặc theo giá trị. Nó được quyết định bởi tuyên bố của nó, và tôi nghĩ rằng sự nhầm lẫn của bạn bắt nguồn từ đây. Ví dụ:
void foo(X x);
lấy tham số x
theo giá trị. Không có cách nào để vượt qua nó bằng cách tham khảo. Không đời nào. Tương tự:
void foo(X& x)
mất theo tham chiếu và sẽ luôn như vậy.
Nguồn
2012-11-05 16:27:22
Câu hỏi công bằng nhưng rất có thể là nếu bạn muốn thực hiện điều này, đó là dấu hiệu của thiết kế kém. Điều này sẽ cấm bạn từ bao thanh toán một chức năng lớn nếu đối tượng này được sử dụng trong suốt. – djechlin
Ý tưởng thú vị, nhưng điều này về cơ bản sẽ giống như không cho phép một con trỏ đến loại đối tượng đó, và điều đó có vẻ khá không hợp lý với tôi. –
@DanF không cho phép con trỏ tôi nghĩ dễ hơn. Làm cho '&' riêng tư nên làm điều đó. – san