c++ - 包装数组的类的转换与下标运算符重载

标签 c++ operator-overloading conversion-operator

我有一个包装数组的类,并希望为其用户提供典型的下标访问。

...
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检查之外,应该首选哪一个?

最佳答案

如果您只想在类 C 上调用 operator[],那么只需重载 operator[] 即可。如果没有必要,不要允许隐式转换。如果你提供operator int*,一些无意义和危险的东西也会被允许。例如

C c;
if (c) ...;
delete c;

关于c++ - 包装数组的类的转换与下标运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59086991/

相关文章:

C++ 将 std::tuple<char, char, char> 转换为 std::string?

c++ - 为什么这个类不隐式转换为指针?

c++ - 在 QtQuick 中自定义样式

c++ - 写入多个文件时崩溃

c++ - 为什么删除操作符必须是静态的?

c++ - 使用括号运算符实现矩阵类的安全方法

c++ - StarCluster错误中的C++程序编译

c++ - 如何查找只包含某个字段而没有其他字段的列表?

c++ - C++ 数组中的重载运算符

c++ - 有没有办法强制自动推导考虑 operator <some_type>() 而不是复制赋值?