c++ - 关于 const 成员函数

标签 c++ constants const-correctness

<分区>

遇到两个const成员函数的解释

class A{
  public:
  ...
  void f() const {}
  ...
}
  1. 这意味着它只能访问常量成员;
  2. 表示不修改任何成员;

我觉得第二个是对的。但是为什么第一个出来呢?有什么需要澄清的吗?

谢谢!

最佳答案

您可以在 const 成员函数中检查所有类成员的值,在某些情况下,您甚至可以更改成员变量的值。第一个解释是不正确的,我不知道它来自哪里。第二种解释是正确的,但有一些异常(exception)。

此规则有一些异常(exception)情况。您还可以更改 const 成员函数中的可变变量,例如这样声明的成员变量:

mutable float my_rank;

你也可以通过 const_cast 对你自己的引用来破坏类中的 const 正确性:

Class* self = const_cast<Class*> (this);

虽然在 C++ 中技术上是允许的,但这通常被认为是糟糕的形式,因为它丢弃了您设计中的所有 const 修饰符。除非您确实必须这样做,否则不要这样做,如果您发现自己不得不经常这样做,则表明您的设计存在问题。 C++ FAQ很好地涵盖了这一点。

如果您想进行更多阅读,这里有两个引用资料:

关于c++ - 关于 const 成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1966319/

相关文章:

c++ - const 文字与 const 函数作为右值?

c++ - 从 "foo<T>"转换为 "const foo<const T>"- C++

c++ - 通过指向常量的指针释放内存是一种好习惯吗

c++ - 为什么 "gptr"类型的basic_streambuf是char_type*而不是const char_type*?

c++ - 在 C++ 中反转字符串

c++ - 转换为枚举类型需要显式转换(static_cast、C 风格转换或函数风格转换)枚举

c++ - C(和 C++)SNIPPETS 库去了哪里?

c++ - cv::Mat的释放方法

java - 使用其值获取接口(interface)常量名称

java - 访问另一个类中的公共(public)最终常量?