Call-by-value và call-by-Reference là các kỹ thuật triển khai bị nhầm lẫn với các chế độ truyền tham số từ lâu.
Ban đầu, đã có FORTRAN. FORTRAN chỉ có tham chiếu theo cuộc gọi, vì các chương trình con phải có thể sửa đổi các tham số của chúng và các chu kỳ tính toán quá tốn kém để cho phép nhiều chế độ truyền tham số, cộng với việc không biết về lập trình khi FORTRAN được xác định lần đầu tiên.
ALGOL đã đưa ra các cuộc gọi theo tên và gọi theo giá trị. Gọi theo giá trị là cho những thứ không được thay đổi (tham số đầu vào). Gọi bằng tên là cho các tham số đầu ra. Call-by-name hóa ra là một crock lớn và ALGOL 68 đã bỏ nó.
PASCAL cung cấp cuộc gọi theo giá trị và cuộc gọi theo tham chiếu. Nó không cung cấp bất kỳ cách nào để lập trình viên nói với trình biên dịch rằng anh ta đang truyền một đối tượng lớn (thường là một mảng) bằng cách tham chiếu, để tránh thổi ngăn xếp tham số, nhưng không nên thay đổi đối tượng.
PASCAL đã thêm con trỏ vào từ vựng thiết kế ngôn ngữ.
C đã cung cấp cuộc gọi theo giá trị và mô phỏng cuộc gọi bằng cách tham chiếu bằng cách xác định toán tử kydge để trả về một con trỏ tới một đối tượng tùy ý trong bộ nhớ.
Các ngôn ngữ sau này sao chép C, chủ yếu là do các nhà thiết kế chưa bao giờ nhìn thấy bất cứ điều gì khác. Đây có lẽ là lý do tại sao gọi theo giá trị rất phổ biến.
C ++ đã thêm một loại bùn ở trên cùng của loại C để cung cấp lệnh gọi theo tham chiếu.
Bây giờ, là kết quả trực tiếp của cuộc gọi theo giá trị so với cuộc gọi theo tham chiếu so với cuộc gọi bằng con trỏ, C và C ++ (lập trình viên) có những cơn đau đầu khủng khiếp với con trỏ và con trỏ đến const (chỉ đọc) các đối tượng.
Ada quản lý để tránh cơn ác mộng này.
Ada không có cuộc gọi theo giá trị rõ ràng so với cuộc gọi theo tham chiếu. Thay vào đó, Ada có các tham số (có thể được đọc nhưng không được viết), ra các tham số (PHẢI được viết trước khi chúng có thể được đọc) và trong các tham số ngoài, có thể được đọc và ghi theo bất kỳ thứ tự nào. Trình biên dịch quyết định xem một tham số cụ thể được truyền theo giá trị hay bằng tham chiếu: nó trong suốt đối với người lập trình.
void acceptEntireProgrammingLanguageByValue(C++);