重载支架操作

时间:2012-01-10 03:17:20

标签: c++

Bracket操作方法可以为多个操作符重载吗?(cpp),我认为Brack操作是一个单独的操作符,但我看到cpp试卷答案中说“Bracket operation method can be overloaded both for single operator and multiple operators”的项目。你能不能帮帮我?

1 个答案:

答案 0 :(得分:2)

虽然你可以对“下标”operator[]进行多次重载,但它们必须只有一个参数(并且参数不能有默认值):

struct Foo {
    R1 operator[](T)               { /* ... */ }
    R2 operator[](S const &) const { /* ... */ }
    void operator[](U *)           { /* ... */ }
};

原因只是语法之一:表达式a[n]有效,但a[m,n]不是有效的二进制表达式(它是相当不同的),a[]也不是{在那种情况下。

使用C ++ 11的初始化列表,您可以使a[{1,2,3}]之类的东西工作(等待编译器支持。)