2015-04-21 22 views
5

Gần đây tôi đã xem một ví dụ trong quá trình xem xét quá tải của nhà điều hành nơi họ đã nói về cách toán tử + về cơ bản là một hàm có 2 tham số.C++ Việc sử dụng toán tử + này được gọi là gì? và mục đích là gì?

Với một chút poking tôi quyết định xem xét điều này một chút sâu hơn và thấy rằng gọi + như một chức năng không thực sự làm việc, chỉ cần không phải là cách bạn mong chờ ... ví dụ:

int first = 6; 
int second = 9; 
int result = +(second,first);//result=6 

Việc lắp ráp cho điều này là

int result = +(second,first); 
mov   eax,dword ptr [first] 
mov   dword ptr [result],eax 

Cuộc gọi đến + chỉ đơn giản là chuyển thông số cuối cùng vào eax.

Bất cứ ai có thể cho tôi biết mục đích của việc này và/hoặc nó được gọi là gì?

+2

đẹp câu hỏi, tôi sẽ đặt nó trong cùng chuyên mục với (http://stackoverflow.com/questions/1642028/what-is-the-name-of-the-operator) – vsoftco

+0

Sau khi nhìn thấy câu trả lời, tôi nghĩ đó là siêu công bằng. Tôi cảm thấy như một thằng ngốc hoàn toàn. – jhbh

+0

Tôi thực sự không mỉa mai :) Đó là một câu hỏi công bằng và tôi đặt cược nhiều người lần đầu tiên bị lừa dối bởi hình thức hài hước này, đặc biệt là nếu có một số nền lập trình chức năng. – vsoftco

Trả lời

11

Có hai phần trong biểu thức +(second,first) - và không có biểu tượng nào trong số đó là cuộc gọi hàm.

Khái niệm (second, first) sử dụng hiếm dấu phẩy hành, mà đánh giá mỗi biểu thức lần lượt, và kết quả của biểu thức là biểu thức cuối cùng đánh giá.

+ trong trường hợp này chỉ là một toán tử + đơn nhất, như nói +5 hoặc -8. Vì vậy, kết quả của biểu thức của bạn là 6, giá trị của first.

Bạn có thể, tuy nhiên, hãy gọi operator + như thế này: [? Tên là gì “->” điều hành]

int result = operator +(second, first); 
+1

Hiếm? cho (p = root, last = NULL; p! = NULL; last = p, p = p-> next) ;-) –

+0

@RichardPennington: Nó hiếm hơn rất nhiều so với việc sử dụng dấu phẩy thông thường, đó là tách đối số hàm trong một cuộc gọi hàm. –

+1

Không có toán tử '+' cho 'int'. (Vâng, có một chữ ký như vậy nhưng chỉ cho mục đích giải quyết quá tải, nó không thể được gọi.) –

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