Mã sau có gọi ra bất kỳ loại hành vi nào được xác định hoặc không xác định được không? Tôi chắc chắn về cách tương tác với các tài liệu tham khảo đang làm việc và Google của tôi/SO tìm kiếm đang mọc lên trống:Chỉ định đối số tham chiếu cho biến cục bộ
struct S {
int i;
};
void Fn(S& s_arg) {
S s_fn{s_arg.i+1};
s_arg = s_fn;
}
int main(int argc, char** argv) {
S s_main{15};
Fn(s_main);
return 0;
}
tôi không chắc chắn nào trong hai sẽ xảy ra khi việc chuyển nhượng xảy ra trong Fn:
- bản sao phân công điều hành mặc định của s được gọi vào
s_main
(là mục tiêu của cács_arg
tham khảo), sao chép dữ liệu từ các địa phương (đểFn
)s_fn
vàomain
's địa phươngs_main
(thông quas_arg
tham khảo, làm cho mọi thứ đúng đắn và chúng ta sẽ được xác định. - Bản thân tham chiếu được chỉ định và bây giờ đề cập đến địa chỉ
s_fn
địa phương củaFn
.Fn
hiện đang trả về tham chiếu đến dữ liệu cục bộ và chương trình hiện đang chờ một hàm khác được gọi từmain
, ghi đès_fn
cục bộ và gây tình trạng lộn xộn chung.
Ah, đó là những gì tôi nhận được để xử lý tài liệu tham khảo dưới dạng con trỏ được tôn vinh mà tôi cho là. Tôi đoán rằng lý do họ không thể trỏ đến một khu vực khác trong bộ nhớ là bởi vì như trường hợp này, bất kỳ chuyển nhượng nào của tham chiếu luôn luôn gọi toán tử gán của đối tượng được nhắc đến? – user2555367
@ user2555367: Tốt hơn là hãy nghĩ đến các tham chiếu dưới dạng bí danh (tên khác) thay vì con trỏ. –