2012-03-10 33 views
5

Tôi đã tự hỏi liệu ... được coi là một nhà điều hành trong C++ 11. Và nếu đúng như vậy, ưu tiên của nó là gì?Trong C++ 11,… được coi là một toán tử?

Ví dụ xem xét ví dụ khá xấu này và giả định ... là một toán tử.

template<typename T, typename...Args> 
void foo(T _elm, Args... _args) 
{ 
    bar(something,_args...); 
} 

Làm thế nào tôi có thể biết liệu bar sẽ được chạy với tham số đầu tiên của nó là somethingargs... mở rộng, hoặc nếu nó sẽ được chạy trên kết quả của operator,(something, _args...)? (Bonus câu hỏi: các nhà khai thác có thể bị quá tải với các mẫu variadic?)

+1

"các toán tử có thể bị quá tải với các mẫu variadic" Không. Hoặc ít nhất, bạn sẽ không nhận được gì bằng cách thực hiện nó. Các toán tử luôn lấy một số tham số cụ thể. –

+0

Xem [this] (http://stackoverflow.com/questions/2396065/c-overloading-operator-comma-for-variadic-arguments). – ApprenticeHacker

+0

@qdii: Heh, nvm :) –

Trả lời

4

tôi đã tự hỏi liệu ... được coi là một nhà điều hành trong C++ 11

Không, ... chắc chắn là không được coi là một nhà điều hành trong C++ 11. Nếu bạn còn nhớ, nó cũng được sử dụng trong tiêu chuẩn trước đó trong xử lý lỗi

catch(...) 

và mặc dù tôi không chắc chắn như thế nào ... được phân tích và phân tích nội bộ, nó chắc chắn là không được đối xử như một nhà điều hành.

Các toán tử có thể bị quá tải với các mẫu variadic không?

Tôi không chắc chắn, nhưng tôi không nghĩ vậy. Nhà điều hành phải thực hiện một tập hợp các tham số được chỉ định như:

int operator + (int param1, my_obj param2); 

Tôi không nghĩ rằng nó sẽ hoạt động với các mẫu variadic.

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