(这不是关于重载运算符的问题。一般来说。)
我们知道使用 setter 和 getter 方法有很多很好的理由。
那么,我觉得奇怪的是,这些不是成员访问的自定义点,即如果类 A 有一个数据成员 x,那么在左值上下文中使用 x 将不仅仅是使用 x,而是调用一些方法(比如A::get_x_lvalue()
,别管语法)默认为
typename std::add_reference<decltype(x)>::type A::get_x_lvalue() { return x; }
并且可以实现为覆盖,并且类似地,当在纯右值常量中使用 x 时,将调用可覆盖
decltype(x) A::get_x_prvalue() const { return x; }
...类似于,比如说,你如何在 Javascript 中做到这一点。
我的问题是:
- 从历史上看,为什么没有将它与可定制的复制构造函数、赋值运算符和析构函数一起添加到语言中?
- 有没有正式提出过这样的事情?如果是这样,它的状态是什么或为什么被拒绝?
- 除了: 1. 编译速度较慢和 2. 不能“相信” my_a.x 中的时间段只是普通访问之外,这种方案是否有重大损害?