【发布时间】:2021-03-19 18:00:39
【问题描述】:
使用 Visual Studio 2019,我正在尝试创建一个模板数组类,其中 T 是数组的类型,S 是它的大小:
// Array.hpp
#include <iostream>
template<typename T, int S> class Array {
T m_array[S];
public:
Array() : Array(0) {}
Array(const T& val) {
for (int i = 0; i < S; i++) { m_array[i] = val; }
}
template<typename E> Array(const E& val) {
for (int i = 0; i < S; i++) { m_array[i] = static_cast<T>(val); }
}
int size() const { return S; }
T operator[](int position) const { return m_array[position]; }
T& operator[](int position) { return m_array[position]; }
friend std::ostream& operator<<(std::ostream& os, const Array& a) {
os << '[';
if (a.size() > 0) { os << a[0]; }
for (int i = 1; i < a.size(); i++) {
os << ', ' << a[i];
}
return os << ']';
}
};
但是,当我创建 Array 的对象并打印它时,我发现输出中混入了奇怪的值:
// main.cpp
#include "Array.hpp"
using namespace std;
int main()
{
Array<int, 10> a1(3);
Array<double, 10> a2(3.14);
Array<int, 10> a3(5.9);
cout << a1 << endl;
cout << a2 << endl;
cout << a3 << endl;
}
给我这个输出:
【问题讨论】:
-
请不要将文字作为图片发布。
-
', '->", "
标签: c++ visual-studio templates