【发布时间】:2018-02-26 18:07:38
【问题描述】:
在 C++ 类中使用 const 引用字段作为只读 getter 好不好?
我的意思是,这段代码符合良好的做法吗?
class check{
private:
int _x;
public:
const int& x = _x;
void setX(int v){
_x = v;
}
};
它的工作方式非常类似于 C# 属性、恕我直言,并且在类使用代码中非常简单明了:
check s;
int i;
std::cin >> i;
s.setX(i);
std::cout << s.x << '\n';
s.setX(7);
// s.x = i; // Error
std::cout<<s.x<<'\n';
【问题讨论】:
-
并且可以被 const 强制转换为遗忘 :)
-
不,这是一种不好的做法,因为与直接的内联 getter 函数相比,存储此引用可能会导致额外的内存开销。另一件事是,无论访问的值如何,您都无法执行运行时检查/断言。不幸的是,没有真正的方法可以模拟类似 C# 属性的语法。有一个MS-specific
propertyextension,但它们是非标准的,被废弃了。 -
尝试将一个
check分配给另一个。 -
IMO 不,这很烦人,并且与价值语义和生命周期有关。例如。如果您的对象被移动或复制,那么引用仍然是指旧对象的,可能会被销毁
-
需要注意的是,一种语言中的习语不在另一种语言中,尝试使用 c++ 作为另一种语言不太可能正常工作
标签: c++ oop properties reference design-principles