我想在const
范围内访问public
时从const
范围访问变量,而{ - 1}}访问非private
或保护范围。我想避免使用getter方法返回对变量的const引用。我尝试使用using
关键字,但到目前为止没有成功。理想情况下,它看起来像这样:
class Foo
{
public:
using var = const m_var; // This is of course gibberish
private:
int m_var;
}
我可以添加一个公共const引用成员变量,并让它指向私有变量,但这样我的类会增加4个字节,我想避免。编译器会意识到并优化该引用吗?
关于如何解决问题的其他想法?
答案 0 :(得分:3)
我想避免使用getter方法返回对变量
的const引用
我不知道为什么你要避免这种情况。这听起来就像你想要的那样(也许只是按值返回):
class Foo
{
public:
int getVar() const { return m_var; }
protected:
int m_var;
};
如果您对protected
有private
或Foo
次访问权限,则可以m_var
。如果不这样做,那么你有一个公共const getVar()
,它不允许你修改它。
真的没有办法做到这一点。由于在访问检查之前发生重载解析,因此const
- 资格或ref-qualification的重载方式不能超载访问权限。这会阻止您执行protected
和public
重载之类的操作,其中protected
重载更匹配。
您也无法在不引入实际引用的情况下为变量添加别名 - 但此时您正在使您的类更大但仍然使用不同的名称来引用public
和protected
,在这一点上使用公共访问者成员函数是严格的更好。