giả sử tôi có một chức năng mà chấp nhận const qua lập luận tài liệu tham khảo,C++ chức năng: pass luận const không đến tham số tham chiếu const
int func(const int &i)
{
/* */
}
int main()
{
int j = 1;
func(j); // pass non const argument to const reference
j=2; // reassign j
}
mã này trình fine.according C++ mồi, những gì lập luận này thông qua chức năng này là như sau,
int j=1;
const int &i = j;
trong đó i là một từ đồng nghĩa (bí danh) của j,
câu hỏi của tôi là: nếu tôi là một từ đồng nghĩa của j, và tôi được định nghĩa là const, i s mã:
const int & i = j
redelcare một biến const không để const biến? tại sao biểu thức này là hợp pháp trong c + +?
bạn có nghĩa là tham chiếu không phải là đối tượng. sau đó làm thế nào để hiểu tôi là một từ đồng nghĩa của j? nó có nghĩa là i và j là cùng một đối tượng, bởi vì cả i và j đều có cùng một địa chỉ vật lý? – fuyi
i là một tham chiếu thay thế cho đối tượng j. Vì vậy, một từ đồng nghĩa. Tuy nhiên, bạn đã nói rằng bạn không thể sử dụng 'i' để thay đổi đối tượng mà nó đang đề cập đến. Không có gì nói rằng bạn không thể sử dụng một số phương pháp khác để sửa đổi đối tượng mà tôi đề cập đến. Bạn đang hạn chế khả năng của tôi với tuyên bố đó, không cố gắng mở rộng chúng, và đó là tốt. –
@xiaopang: ''i'' và '' j'' là tên. Cả hai đều đề cập đến cùng một đối tượng. Thường thì chúng ta nói rằng cái gì đó "là" tên của nó, hoặc tên "là" đối tượng. Ví dụ tôi có thể nói "Tôi là Steve". Nhưng đây là thuật ngữ không chính xác, cả hai đều không giống nhau. Tôi cũng có thể nói, "'Steve' bắt đầu bằng chữ 'S'". Điều đó không ngụ ý rằng * I * bắt đầu bằng vốn 'S'. Các dấu ngoặc kép xung quanh 'Steve' ở đó để chỉ ra rằng tôi đang nói về cái tên, không phải là đối tượng mà nó đề cập đến. 'i' và' j' là các từ đồng nghĩa vì chúng là cả hai tên cho cùng một đối tượng, nhưng các thuộc tính của chúng như các tên khác nhau. –