所以,考慮下面的代碼:支架上的std ::數組運算符過載<性病::陣列<T, N2>,N>數據成員
#include <iostream>
#include <array>
template<class T, std::size_t N, std::size_t N2>
struct foo
{
std::array<std::array<T, N2>, N> data;
T& operator[](std::size_t index) { return data[index]; }
};
int main()
{
foo<int, 3, 3> obj;
std::cout << obj[2][2]; //boom
}
這是我的邏輯: obj[2]
通過本身返回std::array<T, N2>
對象,所以再次申請operator[]
(obj[2][2]
),應該給我我需要的結果。所以實際上obj[2]
它調用foo
的operator[]
,而obj[2][2]
它調用std::array<T, N>
的operator[]
。很明顯不是。
問題:在上面的例子中發生了什麼,爲什麼我的邏輯有問題?
你'操作符[]'被聲明爲返回一個'T&'但隨後嘗試返回'的std ::陣列&'。 –
ildjarn