首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在重载下标运算符时使用const参数?

为什么在重载下标运算符时使用const参数?
EN

Stack Overflow用户
提问于 2014-01-10 10:51:45
回答 6查看 643关注 0票数 2

我是C++的新手,请你解释一下为什么/我什么时候应该使用这个

代码语言:javascript
复制
int & MyArray::operator[] (const int i)
{
    return arr[i];
}

而不是这个

代码语言:javascript
复制
int & MyArray::operator[] (int i)
{
    return arr[i];
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-01-10 10:53:44

这不会有太大的区别!

有些人喜欢把参数看作是不可变的,所以他们将参数标记为const。在这种情况下,这是一个文体的东西。

票数 4
EN

Stack Overflow用户

发布于 2014-01-10 10:56:48

在函数声明中,它完全没有区别,因为顶级的const被忽略了。

这两个声明实际上是相同的,因此,应该避免函数参数中的顶级const

代码语言:javascript
复制
void foo(int);
void foo(const int); // re-declaration of above function

在函数定义中,它意味着不能更改函数中参数的副本:

代码语言:javascript
复制
void foo(int i) { i++; } // OK
void foo(const int i) { i++; } // Error

因此,它可以作为实现工件来表示局部变量是const。这为编译器提供了执行优化的更大范围。

票数 4
EN

Stack Overflow用户

发布于 2014-01-10 10:56:52

不要这样做。从来电者的角度来看,这是完全相同的,只是增加了视觉噪音。

参数i是通过值传递的,是一个普通的数据类型,它被复制,所以当您将它标记为const时,您告诉编译器它不能在方法中更改,但是由于它是一个副本,所以根本不重要,在这个特定的示例中,您只是将它用作索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21042437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档