7.3.12 Toán tử chỉ mục

Toán tử chỉ mục – Subscript operator

Toán tử []
Có thể được thực hiện như là một hàm toàn cục không ? Không
Có thể được thực hiện như là một hàm thành việc của lớp không ?
Kiểu dữ liệu trả về Tham chiếu đến đối tượng nằm bên trái của toán tử (đóng vái trò l-value)

Dạng gốc của toán tử [] là rất phức tạp, cả về cú pháp lẫn các khía cạnh ngữ nghĩa khác. Về cơ bản, nó đòi hỏi hai đối số: một con trỏ (vì tên của một mảng được hiểu như là một con trỏ trỏ đến phần tử đầu tiên của mảng) và một giá trị int (như một chỉ mục). Hơn nữa, dạng ban đầu của toán tử này là hoán vị, tức là với khai báo sau

int arr [10];

thì cả hai phép gàn này đều hợp lệ:

arr [0] = 0;

1 [arr] = 1;

Toán tử chỉ mục được nạp chồng sẽ hơi khác với tổ tiên của nó. Nó có thể chấp nhận các chỉ mục khi chúng không phải là số nguyên – hầu như tất cả các kiểu dữ liệu (kể cả lớp) cũng có thể được sử dụng như là một chỉ mục, cho phép lập trình viên thực hiện các thuật toán tìm kiếm phức tạp. Toán tử này cần phải tìm một tham chiếu đến dữ liệu (được chỉ trực tiếp hoặc gián tiếp bởi giá trị của tham số chỉ mục). Và hàm tương ứng với nó phải được khai báo với một tham số: chỉ có giá trị của chỉ mục là đến từ bên ngoài, bởi vì đối tượng được coi như một đối số thứ hai.

Hãy xem ví dụ →

Chúng ta có thể nói rằng lớp Arr là một mảng, nó chấp nhận các chỉ mục bắt đầu từ 1 (không phải từ 0).

Chương trình xuất ra các dòng sau:

16

9

4

1