Không có nhà điều hành [][]
. Điều thực sự xảy ra là số []
thứ hai hoạt động trên biến được trả về bởi []
đầu tiên.Bởi vì đã có chức năng đó, nó sẽ tạo ra sự mơ hồ ở đó để tồn tại một toán tử [][]
.
Ví dụ: giả sử bạn có một biến số x
của một số loại T
.
T x = new T();
Nếu chúng ta sử dụng toán tử []
, giả sử một biến kiểu khác Q
được trả về:
Q y = x[0];
Và sau đó sử dụng các nhà điều hành []
vào một biến kiểu Q
có thể trả về một biến kiểu R
:
R z = y[0];
Do đó x[][]
trả về biến của t ype R.
Hãy nói rằng chúng tôi thực sự đã có thể quá tải [][]
cho loại T như vậy mà nó trở lại một kiểu S:
S a = x[0][0];
Trình biên dịch sẽ không có cách nào để biết nếu nó nên sử dụng các nhà điều hành [][]
trên x
để trả về loại S
biến hoặc sử dụng toán tử []
hai lần liên tiếp để trả về loại biến số R
. Đây là sự mơ hồ tôi đã đề cập ở trên.
đặt cược tốt nhất của bạn nếu bạn đang bị mắc kẹt trên sử dụng dấu ngoặc vuông là phải có operator[]
trả về một biến mà cũng có []
quá tải (hoặc có lẽ một biến cùng loại, với một bộ cờ), và có ban đầu đã trả về giao dịch biến đổi với số []
thứ hai.
Nhưng giải pháp tốt nhất ở đây (như đã đề cập trong another answer) là sử dụng toán tử khác như ()
.
Không có toán tử [] [] trong C++. –
Quá tải mảng bị trả về bởi quá tải [] OH SHI- –