【问题标题】:What is intention of making a function "const"使函数“const”的意图是什么
【发布时间】:2011-10-26 18:33:54
【问题描述】:

这样,

bool isEmpty() const { return root==NULL; }

这是isEmpty函数,测试BST是否为空。

【问题讨论】:

标签: c++ function constants


【解决方案1】:

表示该函数不修改该类的任何成员。

通常,接口/声明(通过头文件)提供给类/函数的用户而不是实现,因此const 向用户明确表示该函数不会修改任何成员。

添加const 也使函数的用户意识到当你有一个const 对象时应该使用这个const 成员函数。你不能在该类的const 对象上调用普通成员函数,这将导致编译器错误。

这就是函数被标记为const的原因,即使它是空的。它表示函数实现者和函数用户之间的契约。

【讨论】:

  • 如果你有对象的 const 版本,它也是可调用的。非 const 函数不能从 const 实例调用。
  • @Als 你说'const 成员函数只能在该类的 const 对象上调用'。这不是真的:const 成员函数也可以在非 const 对象上调用 :) 但是反过来是不可能的
  • @TomKnapen:啊,当然,英语有时会耍花招(尤其是对像我这样的非英语母语者):)。谢谢我纠正了那个错字。
  • 如果你有一个对象的 const 版本并且你正在调用该对象的方法,那么如果编译器抱怨没有这样的函数,那是因为该方法不是 const。跨度>
【解决方案2】:

当函数被标记为const 时,可以在类的const 实例上调用该函数。在const 对象上调用非const 函数将导致编译时错误。

基本上,您希望将所有不会更改对象状态的函数标记为const;这样,您可以使用const 作为不可变声明,编译器会为您强制执行它,确保您只能调用const 函数。

您可以在非const 实例上调用const 函数没问题。

【讨论】:

    【解决方案3】:

    它告诉编译器该函数不会修改类的状态。此外,const 函数是唯一允许在 const 对象上调用的函数。

    【讨论】:

      【解决方案4】:

      表示函数在逻辑上是恒定的,即对于类的用户而言,类成员的值不会被函数改变。在 const 引用和通过 const 指针调用 const 函数是合法的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-02
        • 2011-03-09
        • 2017-02-23
        • 2023-04-08
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多