c++ - 用于包装数组的类的转换与下标运算符重载
问题描述
我有一个包装数组的类,并希望为其用户提供典型的下标访问。
...
class C;
C c;
auto x = c[0];
...
我可能都提供转换
class C
{
int i[10];
public:
operator int*() { return i; }
};
并提供下标运算符重载
class C
{
int i[10];
public:
int& operator[](unsigned idx) {
// eventual out-of-bounds check
return i[idx];
}
};
除了OOB检查,应该首选哪一项?
解决方案
如果你只想调用operator[]
类C
,那么就重载operator[]
。如果没有必要,不要允许隐式转换。如果您提供operator int*
,也将允许一些无意义和危险的事情。例如
C c;
if (c) ...;
delete c;
推荐阅读
- android - 如何在Android中响应BottomSheetDialogFragment的外部触摸事件
- android - 无法更改活动的名称
- javascript - ngSwitch 是“属性指令”还是“结构指令”?
- javascript - 实施记录最近 5 分钟点击的点击计数器的问题
- jquery - jquery.signalr 无法识别 jquery
- gremlin - AWS 海王星日期时间()
- jquery - jquery点击函数addclass
- mysql - 从 Google 工作表插入 MySQL
- c++ - 代码在 main() 中运行,但在函数中出现错误
- alexa - 关于 AMAZON.DURATION 插槽类型的 Alexa 插槽确认