Giả sử rằng tôi có một lớp học như thế:Sự khác nhau giữa 'T & `và` const T &' cho tất cả const lớp
class Foo : boost::noncopyable
{
public:
Foo(int a, int b);
const int something;
const int something_else;
const std::string another_field;
// and that's that, no more methods nor fields
};
Bây giờ, là có bất kỳ sự khác biệt thực tế giữa việc tiếp cận các đối tượng của lớp này thông qua một Foo&
, trái ngược với const Foo&
, ngoài hai loại này là hai loại riêng biệt?
Sẽ không có bất kỳ sự khác biệt nào khi truy cập vào các trường của chúng tôi, vì chúng là const
, vì vậy chúng sẽ được truy cập thông qua const T&
.
Nhưng có bất kỳ sự khác biệt nào trong số khi nói đến toàn bộ lớp học không? Một cái gì đó để làm với các mẫu, có lẽ? Có gì không?
Bây giờ templatetypedef has written a nice answer, mà tiếc là không hữu ích trong trường hợp này, tôi nghĩ rằng nó muốn được tốt đẹp để nhấn mạnh rằng đó là rất nhiều về những gì bạn có thể làm khi bạn đã có một tài liệu tham khảo (lưu ý tất cả những "truy cập"), không phải về những gì bạn có thể liên kết với tham chiếu.
Vì vậy, bạn có thể giả định rằng ref đã ở đó, bị ràng buộc với một số đối tượng. Bây giờ là tất cả về những gì có thể được thực hiện với nó.
Một lưu ý phụ, nếu bạn có hai 'Foo' được gọi là 'a' và' b', phép gán 'a = b' là bất hợp pháp. Đó là điều bạn muốn? – fredoverflow
@FredOverflow: Có, nó thậm chí còn được làm rõ ràng: 'class Foo: boost :: noncopyable'. – Fanael