2013-01-24 34 views

Trả lời

7

Đó là tham số tham chiếu trong C++. Trong Delphi tương ứng với varparameter.

procedure ABC(var a: Integer; var b: Integer); 

Các tài liệu nói:

Hầu hết các thông số là một trong hai thông số giá trị (mặc định) hoặc (var) biến các thông số. Tham số giá trị được truyền theo giá trị, trong khi các thông số biến được truyền theo tham chiếu.

4
void ABC(int &a, int &b) 

sẽ trở thành

procedure ABC(var a: Integer; var b: Integer); 

Từ khóa var chỉ ra rằng bạn muốn vượt qua giá trị tham khảo, chứ không phải là giá trị.

+1

'procedure ABC (var a, b: Integer); 'trông đơn giản hơn. – willys

+2

Có thực sự, nhưng nó là rõ ràng hơn để hiển thị các hình thức mở rộng. –

1

Ngoài ra còn có procedure ABC(out a: Integer; out b: Integer); Mặc dù nó không phải là chính xác các tham số var, chúng cũng đi theo hướng tiếp cận và dự định truyền giá trị. Tùy thuộc vào ngữ nghĩa của mã bạn cảng, bạn có thể chọn var hoặc out trên cơ sở từng trường hợp cụ thể.

+0

Tham số Del out 'out' cho một kiểu giá trị như' Integer' được thực hiện chính xác giống như 'var'. Nó khá lame. Nhưng mã C++ không giống 'out'. Vì vậy, tôi không chắc chắn lý do tại sao bạn đề cập đến nó. Cũng có 'const', v.v. –

+0

@DavidHeffernan' Inc (con trỏ) 'và' Inc (số nguyên) 'cũng được thực hiện giống nhau, điều đó không có nghĩa là cùng ngữ nghĩa. Chúng tôi không biết ý định ngữ nghĩa của mã của topicstarter và chúng tôi không biết liệu điều khiển trình biên dịch bổ sung có giúp ích cho anh ta hay không. ra là tính năng thường xuyên bị bỏ qua và nó không làm tổn thương để tìm hiểu nó. –

+0

Tôi cho rằng việc thực hiện 'out' trong Delphi khiến cho nó thường là một tính năng sai. So sánh với C# và thở dài. –

1

Như những người khác đã chỉ ra, việc kê khai Delphi equivilent là procedure ABC(var a, b: Integer);, trừ ý định của bạn là để tuyên bố một C bên ngoài/C++ - chức năng thực hiện mà Delphi mã có thể gọi vào, trong trường hợp này bạn phải lấy C/Quy ước gọi điện của hàm C++. Một khai báo hàm Delphi không quy định một quy ước gọi, như trên, sử dụng quy ước gọi của Delphi là register (được gọi là __fastcall trong C++ Builder). Khai báo C/C++ mà bạn hiển thị không chỉ định quy ước gọi, do đó quy ước gọi mặc định của trình biên dịch C/C++ được sử dụng, trong hầu hết các thiết lập là __cdecl, trong trường hợp khai báo Delphi tương đương trở thành: procedure ABC(var a, b: Integer); cdecl;

Các vấn đề liên quan