C ++的operator []可以使用多个参数吗?

时间:2011-08-11 20:57:05

标签: c++ operator-overloading subscript-operator

是否可以定义一个带有多个参数的重载operator[]?也就是说,我可以如下定义operator[]

  //In some class
  double operator[](const int a, const int b){
     return big_array[a+offset*b];}

以后会像这样使用它?

double b=some_obj[7,3];

7 个答案:

答案 0 :(得分:5)

没有。在C ++中这样做的惯用方法是

double b = some_obj[7][3];

答案 1 :(得分:5)

不,你不能重载operator[]来获取多个参数。而不是

double b = some_obj[7,3];

使用

double b = some_obj[7][3];

This answer解释了如何创建代理对象以便能够使用后者。

否则,您可以重载operator()以获取2个参数。

答案 2 :(得分:3)

不,C ++语法在

中表示
double b=some_obj[7,3];

逗号是逗号运算符,而不是用于分隔参数的逗号。

答案 3 :(得分:2)

底线:不,不要混淆用户。

来自C++ FAQ

  

记住运营商重载的目的:降低成本和   使用您的类的代码中的缺陷率。如果你创建运算符   混淆了你的用户(因为他们很酷,因为他们制作代码   更快,因为你需要向自己证明你可以做到;   并不重要,为什么),你违反了使用的全部原因   操作员首先进行超载。

答案 4 :(得分:2)

你可以做Andrea所建议的,或者你可以重载operator()来获取两个参数:

// In some class
double operator()(const int a, const int b) {
    return big_array[a + offset * b];
}

// Then use it like this:
double b = some_obj(7, 3);

答案 5 :(得分:1)

更好的方法是,operator(),因为它不会阻止你创建临时数据并允许多个参数。更多详情请见C++ FAQ

答案 6 :(得分:1)

你不能,但在这种情况下,我认为一个功能会更好,因为你的操作员在做什么并不直观。