Là đoạn này trong Code Complete 2 ngược, hay tôi hiểu nhầm nó?


8

Trong chương 13, khi nói về con trỏ, có một đoạn:

Tuy nhiên, đôi khi, bạn muốn có ngữ nghĩa của việc chuyển qua tham chiếu, đó là, đối tượng được truyền không nên bị thay đổi với việc thực hiện chuyển qua giá trị, nghĩa là truyền đối tượng thực tế chứ không phải là bản sao.

Có vẻ như tác giả đã mắc lỗi và trộn lẫn cả hai. Điều này có đúng không, hay tôi không hiểu chính xác những gì anh ấy nói?

Câu trả lời:


12

Bạn đã đúng và điều này đã có trong trang errata của cuốn sách.

Tham chiếu nên có giá trị Trên trang 333, Thay đổi: "Tuy nhiên, đôi khi, bạn muốn có ngữ nghĩa của việc vượt qua bằng cách tham chiếu" Đến "Tuy nhiên, đôi khi, bạn muốn có ngữ nghĩa của việc vượt qua theo giá trị"

Giá trị nên được tham chiếu Trên trang 333, Thay đổi: "với việc thực hiện vượt qua theo giá trị" Đến: "với việc thực hiện vượt qua bằng tham chiếu"


3

Vâng, nó dường như được trộn lẫn. Chuyển đổi nó và thêm một chút nữa, và nó có ý nghĩa.

Đôi khi bạn muốn triển khai pass theo giá trị - đó là đối tượng được truyền là một bản sao và các thay đổi không ảnh hưởng đến bản gốc - với semanics của pass bằng tham chiếu - đó là chính đối tượng không được thông qua.

Đây sẽ là một cái gì đó giống như một tham số const. Điều này sẽ cho phép bạn có một cấu trúc lớn, có thể thay đổi, trong phạm vi của một chức năng cụ thể, không thay đổi.


1
Ý của bạn là chuyển đổi "triển khai" và "ngữ nghĩa" cũng như "giá trị" và "tham chiếu"? Bởi vì, với tôi, nó sẽ có ý nghĩa hơn nếu bạn giữ "triển khai" và "ngữ nghĩa" như hiện tại và chỉ chuyển đổi "giá trị" và "tham chiếu". Ngoài ra, ý của bạn là "const paramater (không tồn tại)" là gì? Tài liệu tham khảo Const tồn tại.
sepp2k

2
Ý bạn là gì, không tồn tại? const T&hoàn toàn không tồn tại trong C ++.
DeadMG

1
Lỗi của tôi trên tài liệu tham khảo const.
jmoreno
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.