【发布时间】:2015-07-06 06:05:13
【问题描述】:
如果这个问题之前已经回答过,我很抱歉,我在任何地方都找不到答案。
我在保持 const 正确性方面遇到了麻烦。
我有以下定义。
struct C {
int x,y;
};
class A {
public:
C c;
C& getC() { return c; }
};
class B {
public:
void forwardInfo(const A& a) const {
const C& c = a.getC(); // <= compiler complains here
daoObject.updateTableX(c.x,c.y);
}
};
编译器抱怨对象 a 是 const,因此不能调用 a.getC(),因为该方法不是 const。
但是,我将结果分配给 const 引用。 现在我只是将对象转换为非 const 引用,如下所示:
const C& c = ((A&)a).getC();
这可行,但并不优雅。有没有更好的方法而不改变常量。我相信对于对象 A,将 C 作为非 const 返回是合理的,因为它是要被更改的。
forwardInfo 也应该是 const,因为我不想改变任何东西。
我不确定为什么编译器不让我这样做,有没有更好的方法?
附言。我可以使用 getter/setter 方法,但 C 类旨在用作传递给数据库的数据桶。
谢谢。
修正:演员阵容中的括号位置和不正确的演员。
【问题讨论】:
-
按照您的建议将结果投射到
const是行不通的。导致错误的是对象a,您在其上调用了非const成员。
标签: c++ reference constants const-correctness