繁体   English   中英

在public const修饰符中使用变量

[英]Using variable with public const modifier

我想在我的类中有一个变量,当从public作用域访问时为const ,而从private或受保护范围访问时为非const 我想避免使用一种getter方法来返回对该变量的const引用。 我尝试弄乱using关键字,但到目前为止没有成功。 理想情况下,它看起来像这样:

class Foo
{
public:
    using var = const m_var; // This is of course gibberish
private:
    int m_var;
}

我可以添加一个公共的const引用成员变量,并使其指向私有变量,但是那样,我的类将增加4个字节,这是我想避免的。 编译器会意识到这一点并优化参考吗?

关于如何解决问题还有其他想法吗?

我想避免使用getter方法来返回对变量的const引用

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

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

如果您具有对Foo protectedprivate访问,则只需m_var 如果不这样做,那么您将拥有一个公共const getVar() ,该常量getVar()您对其进行修改。


确实没有其他方法可以做到这一点。 您不能像使用const -qualification或ref-qualification那样重载访问权限,因为重载解析发生在访问检查之前。 那会禁止您执行protected public过载之类的事情,而protected过载更适合。

您也不能在不引入实际引用的情况下为变量添加别名-但那时候您是在扩大类的大小,但是无论如何仍在使用不同的名称来引用publicprotected ,此时使用public访问器成员函数是严格更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM