Thực tế là bạn đang thực hiện cuộc gọi phương thức không quan trọng ở đây. Tham số khởi tạo tham chiếu trong khi gọi hàm không khác với khởi tạo tham chiếu độc lập và được điều chỉnh bởi cùng một quy tắc.
Quy tắc khởi tạo tham chiếu hơi phức tạp một chút, nhưng dòng dưới cùng là nếu trình khởi tạo là một giá trị (đối số trong cuộc gọi phương thức trong trường hợp của bạn) và loại tham chiếu giống như loại initializer (tức là kiểu tham số cũng giống như kiểu đối số), thì tham chiếu sẽ bị ràng buộc trực tiếp. I E. không có bản sao nào được tạo.
Object a; // class type
Object &r = a; // no copying
const Object &cr = a; // no copying
Nếu yêu cầu này không được đáp ứng (ví dụ: nếu trình khởi tạo là giá trị), thì tất cả đều phụ thuộc. Trong một số trường hợp, việc sao chép có thể và sẽ diễn ra. Ví dụ
const Object &tr = Object();
có thể được giải thích bởi trình biên dịch như
const Object &tr = Object(Object(Object(Object())));
với thực hiện phụ thuộc vào số hữu hạn các copyings. Tất nhiên, vì lý do hiệu quả, các trình biên dịch thường cố gắng không tạo các bản sao không cần thiết, ngay cả khi chúng được phép sao chép.
Một ví dụ điển hình thường khuấy động cuộc tranh luận về tính hợp lệ của các hành vi sao chép các trình biên dịch là khởi tạo tài liệu tham khảo trong các biểu thức như sau một
Object a;
const Object &r = <some condition> ? a : Object();
Một người quen thuộc với ngữ nghĩa C++ tài liệu tham khảo sẽ hiểu rằng biểu thức như ở trên có thể là lý do đằng sau sự cho phép chuẩn để thực hiện sao chép thừa trong quá trình khởi tạo tham chiếu.
ngữ của bạn không nên đề nghị rằng 'anotherObject' đang tạo ra một bản sao của chính nó .. các đối tượng đó được tạo ra sau khi mới sẽ được tạo ra một bản sao của' anotherObject'. –
@Hassan: Đừng thay đổi ý nghĩa của câu hỏi mà không hỏi OP. Đó là một sự khác biệt quan trọng. '& anotherObject' là một con trỏ, không phải là tham chiếu. –
"người ta không thể nói" rằng đối tượng mới (& anotherObject) 'sẽ tạo ra một bản sao của một đối tượng khác ngầm (đó là những gì từ ngữ được đề xuất). Để tuyên bố đó đúng, cú pháp cần điều chỉnh. –