V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
weimo383
V2EX  ›  问与答

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

  •  
  •   weimo383 · 2020-08-03 21:09:09 +08:00 · 2283 次点击
    这是一个创建于 1558 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如下

    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 类型?

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

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

    凭印象大概是这么个意思,错了勿喷
    ysc3839
        7
    ysc3839  
       2020-08-03 21:55:44 +08:00
    jones2000
        8
    jones2000  
       2020-08-04 04:43:31 +08:00
    成员变量,只读操作,无法修改。
    mxalbert1996
        9
    mxalbert1996  
       2020-08-04 08:33:39 +08:00 via Android
    这里的 const 只是语义上的 const,表明这个函数不改变对象的状态。但如果你还是想要改变一些成员变量的值,比如你要缓存一些数据(改变缓存并不改变对象本身的状态),那么你可以在缓存变量前加上 mutable 。
    weimo383
        10
    weimo383  
    OP
       2020-08-04 14:11:05 +08:00 via Android
    @OhYee 谢谢,懂了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 18:59 · PVG 02:59 · LAX 10:59 · JFK 13:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.