我是C ++的新手,所以请你解释为什么/我应该何时使用这个
int & MyArray::operator[] (const int i)
{
return arr[i];
}
而不是
int & MyArray::operator[] (int i)
{
return arr[i];
}
答案 0 :(得分:4)
它并没有产生太大的差异!
有些人喜欢将参数视为不可变参数,因此将它们标记为const
。在这种情况下,这是一种风格化的东西。
答案 1 :(得分:4)
在函数声明中,它完全没有区别,因为忽略了顶级const
。
这两个实际上是相同的声明,因此应该避免函数参数中的顶级const
:
void foo(int);
void foo(const int); // re-declaration of above function
在函数定义中,这意味着您无法更改函数中参数的副本:
void foo(int i) { i++; } // OK
void foo(const int i) { i++; } // Error
因此,它可以用作实现工件,以表示局部变量为const
。这为编译器提供了更多的优化范围。
答案 2 :(得分:1)
不要这样做。它从呼叫者的角度来看是相同的,只会增加视觉噪音。
参数i
按值传递并且是纯数据类型,它被复制,因此当您将其标记为const
时,您告诉编译器它无法在方法内部进行更改,但是因为它是一个副本,所以它根本不重要,在这个具体的例子中,你只是将它用作索引。
答案 3 :(得分:1)
两种形式都是正确的。如果要确保在函数中不修改“i”参数,请使用第一个参数,如果函数更长/更复杂,这可能很有用。 但是,在运算符的声明中不要使用const:
int& operator[](int i);
没有const的声明和使用它的定义是合法的。
答案 4 :(得分:0)
作为一项规则,您不打算修改的任何内容都应为const
答案 5 :(得分:0)
如果您不想尝试编辑参数,那么最好使用const
。
就性能而言,差别不大。但它可以保护您的参数免于编辑(意外)内部函数。
int & MyArray::operator[] (const int i)