Nói rằng tôi xác định, nhanh chóng, và sử dụng một functor bộ cộng như vậy:Trình biên dịch xử lý các toán tử gọi hàm bị quá tải trong các hàm functors như thế nào?
class SomeAdder {
public:
SomeAdder(int init_x): x(init_x) {}
void operator()(int num) { cout << x + num <<endl; }
private:
int x;
};
SomeAdder a = SomeAdder (3);
a(5); //Prints 8
SomeAdder b(5);
b(5); //Prints 10
Các nhà xây dựng và quá tải ()
điều hành đều gọi là sử dụng dấu ngoặc kép và có cùng loại của các tham số. Trình biên dịch sẽ xác định hàm nào sẽ sử dụng trong các phiên bản của SomeAdder
và "các cuộc gọi hàm", để thực hiện hành vi đúng? Câu trả lời có vẻ như nó sẽ hiển nhiên trên bề mặt, nhưng tôi không thể quấn đầu quanh ý nghĩ này.
Cảm ơn bạn đã dành thời gian!
Giống như cách nó phân biệt 'f (x)' với 'g (x)' trong đó 'void f (int); void g (int) ';-) – delnan
Nếu trình biên dịch thấy' SomeAdder (...) ', thì làm thế nào nó có thể nghĩ rằng đó là một cuộc gọi đến một' operator() 'nếu' SomeAdder' là một kiểu? – mfontanini
Thành thật mà nói, tôi cũng nhớ là bị lẫn lộn bởi điều này, ban đầu, quay trở lại khi nào. –