【发布时间】:2018-09-07 07:34:18
【问题描述】:
这两个函数有什么区别?
double &operator[](size_t i) { return features_[i]; }
double operator[](size_t i) const { return features_[i]; }
1,第一个允许修改features_[i],第二个不行?
2,我写Mytype[i] = 0和double x = Mytype[i]时会选择哪个算子?
【问题讨论】:
-
1) 是的。 2) 取决于
Mytype实例是否为const。在这两种情况下。 -
如果我将
Mytpe声明为const? -
我的评论应该已经暗示了答案,但是由于第二个重载被标记为
const,它将被选择用于const实例,而非const方法(第一个重载)将被选择用于非const实例。 -
如果我只提供第一个函数,
const Mytype尝试修改返回值是否有风险?或Mytype之前的const将保证Mytype不会分配features_? -
如果您只提供第一个重载,那么如果您尝试在
const对象上调用它,它将不会被调用,因为编译器只会寻找const方法。这就是它们的全部目的——在const对象上调用。您为什么不只是: 1) 自己尝试这些问题,并观察编译器给您带来的错误? 2) 考虑向good C++ book学习?