You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

结构体封装固定大小二维数组的下标运算符返回数组类型问题

让结构体封装的二维数组支持原生数组的sizeof特性

原生固定大小二维数组T array[M][N]中,array[i]的类型是T[N],因此sizeof(array[i])等于N * sizeof(T)。但你当前的结构体代码里,operator[]返回T*,导致sizeof(array[i])变成指针的大小,断言自然失败。

C++确实不能直接返回数组类型,但可以返回数组的引用,这就能解决问题。修改operator[]的返回类型为constexpr T(&)[N],具体代码如下:

template<class T, int M, int N>
struct Array
{
    T data[M][N];

    // 返回数组的引用,而非指针
    constexpr T(&operator[](int i))[N]
    {
        return data[i];
    }

    // 补充const版本,支持const对象访问
    constexpr const T(&operator[](int i) const)[N]
    {
        return data[i];
    }
};

这样修改后,array[i]的类型是T[N]的引用,sizeof(array[i])就会等于N * sizeof(T),和原生二维数组的行为完全一致,同时依然支持array[i][j]的访问方式——因为数组引用可以像普通数组一样使用下标运算符。

测试断言的示例代码:

#include <cassert>

int main() {
    Array<int, 3, 4> arr;
    assert(sizeof(arr[0]) == 4 * sizeof(int)); // 断言会成功
    return 0;
}

内容的提问来源于stack exchange,提问作者user2052436

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:03:12