Cách truyền / chuyển con trỏ sang tham chiếu trong C ++


143

Làm thế nào tôi có thể chuyển một con trỏ ( Object *ob) cho một hàm mà nguyên mẫu là void foo(Object &)?


Tiêu đề cho biết "cast [sic] tham chiếu đến con trỏ" nhưng câu hỏi bắt đầu bằng một con trỏ và cần một tham chiếu. Đó là hướng nào?
MSalters

@MSalters nó nên được chuyển đổi . Tôi đang chỉnh sửa nó. Nhưng tôi đang tìm bất cứ giải pháp nào tôi nhận được, vì vậy tôi đã đề cập đến dàn diễn viên
Dewsworld

Câu trả lời:


209

Gọi nó như thế này:

foo(*ob);

Lưu ý rằng không có sự phân vai nào đang diễn ra ở đây, như được đề xuất trong tiêu đề câu hỏi của bạn. Tất cả những gì chúng ta đã làm là hủy tham chiếu con trỏ tới đối tượng mà sau đó chúng ta chuyển đến hàm.


25
@Ricobob Đó là những gì xảy ra trên SO rất thường xuyên. Các câu trả lời cho các câu hỏi đơn giản có thể dễ hiểu thường thu được rất nhiều phiếu bầu. Các câu trả lời dài và phức tạp cho các câu hỏi khó thường nhận được ít lượt ủng hộ vì các cử tri không thể dễ dàng đánh giá công đức. Đối với đại diện, tôi không có gì về điều này vì nắp đại diện. ;-) Nhưng tôi chân thành đồng ý. Tôi muốn câu trả lời phức tạp thu được nhiều đại diện hơn.
David Heffernan

@DavidHeffernan Vâng, đây có vẻ là vấn đề - Tôi đoán đó là vấn đề cần xử lý với MetaSO - nếu ai đó chưa nêu ra điều đó.
Ricibob

4
Điều này có tạo ra một bản sao obhoặc chỉ chuyển đổi (nếu không truyền) con trỏ thành tham chiếu không? Điều gì nếu obnullptr?
Drew Noakes

5
@Drew Nó chỉ đơn giản là hủy bỏ con trỏ. Không được sao chép. Không có chuyển đổi. Không có diễn viên. Đối tượng sau đó được truyền bằng tham chiếu đến hàm. Đó là một lỗi nếu điểm là null.
David Heffernan


41
foo(*ob);

Bạn không cần phải sử dụng nó vì nó cùng loại Object, bạn chỉ cần loại bỏ nó.


đoán amd thêm rất nhiều ... thường không phải là định dạng của một câu trả lời hay ở đây (mặc dù nó đúng trong trường hợp này), đó có thể là lý do tại sao bạn có một downvote.
KillianDS

5
bhhaaa, tôi đã thêm "Tôi đoán" bởi vì nó khiến tôi viết ít nhất 30 ký tự. đó cũng là cách tôi thêm "..........."
Roee Gavirel

10
@RoeeGavirel Tôi là người bỏ phiếu đầu tiên của bạn bởi vì tôi cảm thấy sự thất vọng là khắc nghiệt. FWIW bạn có thể vượt quá giới hạn 30 char nhưng thêm nhận xét HTML <! -----------------------------> mà tôi đã làm trong phiên bản đầu tiên của tôi về câu trả lời! Chỉnh sửa của tôi để trả lời của bạn cho thấy làm thế nào.
David Heffernan

Những câu trả lời chỉ có mã, không có lời giải thích, được tán thành trong những ngày này.
Keith M

1
@KeithM - Đó là một nhận xét ngẫu nhiên và -1. Câu trả lời đã được đưa ra khoảng 6 năm trước, cũng là câu hỏi không hỏi về "tại sao" nó chỉ hỏi "làm thế nào". Nhưng chắc chắn, tôi sẽ thêm một lời giải thích.
Roee Gavirel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.