代码如下
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 类型?
|  |      1May725      2020-08-03 21:16:12 +08:00 via iPhone 关键词“const 函数” | 
|  |      2weimo383 OP 百度了一圈 int getSize () const 是指只读函数? | 
|  |      4Aspector      2020-08-03 21:24:18 +08:00 表示这个 member 不会改变对象本身,this 是一个指向 const 对象的 const 指针 | 
|      5optional      2020-08-03 21:38:09 +08:00 via iPhone 就是 immutable 函数,,,给你超乎想象的安全感。 | 
|  |      6OhYee      2020-08-03 21:38:43 +08:00 via Android 说明这个操作不会修改对象本身,就比如只是获取对象的值进行简单计算。 与其对应的不带 const 的函数就是存在修改对象本身的可能(比如设置某一项的值) 如果你没有修改对象,那么应该带着 const,一来可以提醒别人这里不会修改,二来如果是一个类多个 const,你是没法在 const 里调用非 const 的(函数说不会修改的前提下,其内部不能有修改对象的可能性) 凭印象大概是这么个意思,错了勿喷 | 
|  |      7ysc3839      2020-08-03 21:55:44 +08:00 | 
|      8jones2000      2020-08-04 04:43:31 +08:00 成员变量,只读操作,无法修改。 | 
|  |      9mxalbert1996      2020-08-04 08:33:39 +08:00 via Android 这里的 const 只是语义上的 const,表明这个函数不改变对象的状态。但如果你还是想要改变一些成员变量的值,比如你要缓存一些数据(改变缓存并不改变对象本身的状态),那么你可以在缓存变量前加上 mutable 。 |