有需要声明一个具有所有const属性的类的const实例吗?

时间:2014-05-03 20:59:39

标签: c++ c++11 attributes const member-functions

这是Does a class with all attributes const need to have member function declared const as well?的后续内容。

所以我的所有属性都是const的PermutationGroup类。编译器仍然区分const和非const实例:

struct Foo {
  const int bar;
  void meth();
};
int main() {
   Foo foo {2};
   foo.meth();          // correct

   const Foo cfoo {1};
   cfoo.meth();         // wrong
};

正如@nosid在提到的问题中所注意到的那样,不能将非const成员函数称为const实例:

bla.cpp: In function ‘int main()’:
bla.cpp:10:14: error: passing ‘const Foo’ as ‘this’ argument of ‘void Foo::meth()’ discards qualifiers [-fpermissive]
    cfoo.meth();

所以问题是:为什么可以声明属性都是const的类的非const实例。有合理的用途吗?

1 个答案:

答案 0 :(得分:0)

那么,一个可能的推理为什么应该允许它在一个成员都是const的类中声明一个非const实例,这只是你的事实。无法编写以下代码:

class Foo { Foo(void) const; };

提出了什么:

error: constructors may not be cv-qualified

这意味着,至少有一个成员 - 构造函数,肯定是析构函数 - 总是非const