【发布时间】:2016-06-10 18:47:19
【问题描述】:
我想在我的类中有一个变量,当从public 范围访问时为const,当从private 或受保护的范围访问时,我想在我的类中有一个非const 的变量。我想避免使用返回对变量的 const 引用的 getter 方法。我尝试使用 using 关键字,但到目前为止没有成功。理想情况下,它看起来像这样:
class Foo
{
public:
using var = const m_var; // This is of course gibberish
private:
int m_var;
}
我可以添加一个公共 const 引用成员变量并让它指向私有变量,但是这样我的类会变大 4 个字节,我想避免这种情况。编译器会意识到这一点并优化该引用吗?
关于如何解决问题的任何其他想法?
【问题讨论】:
-
“我想避免使用返回对变量的 const 引用的 getter 方法。”为什么不?这是推荐的方法。从语言的角度来看,对对象的引用与直接访问对象是一样的,因此是一回事吗
-
不,C++ 没有类似 C# 的属性
-
getter 方法可以解决问题,但看起来也很难看:
object.var.incrementByOne()vsobject.getVar().incrementByOne()。尽管功能相同,但它看起来更像是返回和操作变量的副本,而不是实际的变量本身。我应该补充一点,incrementByOne()是(无论出于何种原因)const函数。 -
其实一点也不像。这完全在你的脑海里。这个“问题”完全是人为的,只是您对代码设置的完全任意限制的结果。这不是一个真正的问题。
-
如果你来自另一种语言,它可能看起来像这样,但不幸的是,这是 C++ 中唯一有效的方法,所以 C++ 读者已经习惯了。顺便说一句,有没有可能在所有情况下都可以将
Foo对象const设置为客户端代码?在这种情况下,您可以将m_var公开为公共成员,将其设为mutable并仅从您的私有函数中更改它。这是我现在唯一能想到的另一个hack