使用带有公共const修饰符

时间:2016-06-10 18:47:20

标签: c++ private public

我想在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个字节,我想避免。编译器会意识到并优化该引用吗?

关于如何解决问题的其他想法?

1 个答案:

答案 0 :(得分:3)

  

我想避免使用getter方法返回对变量

的const引用

我不知道为什么你要避免这种情况。这听起来就像你想要的那样(也许只是按值返回):

class Foo
{
public:
    int getVar() const { return m_var; }
protected:
    int m_var;
};

如果您对protectedprivateFoo次访问权限,则可以m_var。如果不这样做,那么你有一个公共const getVar(),它不允许你修改它。

真的没有办法做到这一点。由于在访问检查之前发生重载解析,因此const - 资格或ref-qualification的重载方式不能超载访问权限。这会阻止您执行protectedpublic重载之类的操作,其中protected重载更匹配。

您也无法在不引入实际引用的情况下为变量添加别名 - 但此时您正在使您的类更大但仍然使用不同的名称来引用publicprotected ,在这一点上使用公共访问者成员函数是严格的更好。