【问题标题】:const at the end of one method giving errorconst 在一种方法的末尾给出错误
【发布时间】:2014-04-10 23:10:34
【问题描述】:

我不明白为什么在我的方法结束时会出现 che const 错误。方法 print 不会改变任何类成员,对吧?

class Hello{

public:
   int get_member() {return member_;};
   void print() const {
       cout<<get_member()<<endl; 
   };

private:
   int member_;

 };

错误信息是: 将“const Hello”作为“int Hello::get_member()”的“this”参数传递时出错,丢弃限定符 [-fpermissive]

【问题讨论】:

  • 您正在从 cv 限定函数调用非 cv 限定函数。不要那样做。将get_member 声明为const,无论如何它应该是。
  • constant function的可能重复
  • @CaptainObvlious : cv-qualified 是什么意思?
  • @FordPrefect const-volatile.

标签: c++ methods constants


【解决方案1】:
int get_member() const {return member_;}

应该修复它。您不能从 const 成员调用非常量成员,因为它破坏了 const 的“承诺”。如果可以,则无法保证在调用期间不会修改对象。

【讨论】:

  • 其实可以,你只需要向编译器保证没问题(强制转换)。违背承诺会受到 UB 的惩罚。
  • 你说得对,从 const 调用非 const 成员的结果可以通过强制转换来实现。很高兴您指出了这一点-让这个问题的读者知道这一点很有好处。但是我强烈认为应该补充一点,在完成之前需要非常仔细地考虑更改某些东西的 cv 限定符。如果可能,请避免这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多