【发布时间】:2020-07-27 08:43:38
【问题描述】:
我为二维数组编写了一个模板,并设计了一种计算数组中有多少元素的方法。但是,该方法不返回任何内容。
template <class T, int row, int column>
class array2d {
private:
typedef T value;
//typedef value * iterator;
std::vector<T> array;
public:
array2d() : array(row * column) {}
explicit array2d( std::initializer_list<T> list) : array(list) {}
constexpr T& length(){
int cnt = 0;
for (auto element : array)
++cnt;
return cnt;
}
其他方法正确返回我需要的内容。似乎使用 int 时,我不能使用 .size(),因为它返回 unsigned long long int 并决定计算 for 中的元素。
【问题讨论】:
-
未定义的行为!您正在返回对局部变量
cnt的引用。删除参考。也不要过于复杂,只需使用arrat.size()。 -
不要返回对本地的引用 - 按值返回。另外,为什么
array2d<double>的长度会是double类型?不应该是整数类型吗?为什么不直接返回row *column或array.size()? -
元素个数不是静态已知的吗?
row * column?如果你有静态数组,为什么要使用std::vector。为什么不std::array<std::array, column>, row>? -
另外,你用 int 计数但返回 T。而且你已经有了 array.size() 那么为什么要迭代向量呢?
-
顺便说一句,您应该包含一个完整的示例,用于询问有关代码问题的问题 (minimal reproducible example)。该函数确实返回了一些东西,而不是你期望它返回的东西