C++在函数名后面加 const 是什么意思?

2020-08-03 21:09:09 +08:00
 weimo383

代码如下

template <typename T, int N>
class Array{

public:
  Array()= default;
  int getSize() const;

private:
  T elem[N];
};

template <typename T, int N>
int Array<T,N>::getSize() const {
  return N;
}

大佬有没有关于 const 详解的文章,我经常在 c++中看见 const 。。。非常迷惑,我以为 const 就是用于声明常量罢了,这个 getSize ()函数模板中的 N 是 const int 类型?

2300 次点击
所在节点    问与答
10 条回复
May725
2020-08-03 21:16:12 +08:00
关键词“const 函数”
weimo383
2020-08-03 21:19:26 +08:00
百度了一圈 int getSize () const
是指只读函数?
May725
2020-08-03 21:23:34 +08:00
@weimo383 不一样的百度吗?或者你-了 csdn ?
Aspector
2020-08-03 21:24:18 +08:00
表示这个 member 不会改变对象本身,this 是一个指向 const 对象的 const 指针
optional
2020-08-03 21:38:09 +08:00
就是 immutable 函数,,,给你超乎想象的安全感。
OhYee
2020-08-03 21:38:43 +08:00
说明这个操作不会修改对象本身,就比如只是获取对象的值进行简单计算。
与其对应的不带 const 的函数就是存在修改对象本身的可能(比如设置某一项的值)

如果你没有修改对象,那么应该带着 const,一来可以提醒别人这里不会修改,二来如果是一个类多个 const,你是没法在 const 里调用非 const 的(函数说不会修改的前提下,其内部不能有修改对象的可能性)

凭印象大概是这么个意思,错了勿喷
ysc3839
2020-08-03 21:55:44 +08:00
jones2000
2020-08-04 04:43:31 +08:00
成员变量,只读操作,无法修改。
mxalbert1996
2020-08-04 08:33:39 +08:00
这里的 const 只是语义上的 const,表明这个函数不改变对象的状态。但如果你还是想要改变一些成员变量的值,比如你要缓存一些数据(改变缓存并不改变对象本身的状态),那么你可以在缓存变量前加上 mutable 。
weimo383
2020-08-04 14:11:05 +08:00
@OhYee 谢谢,懂了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/695348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX