Я пытаюсь сделать вектор из нескольких целых чисел, перегружая оператора < < и оператора преобразования. Однако, когда я проверяю свой код, я наблюдаю некоторые абсурдные результаты.vector push_back показывает абсурдный результат
Напечатанный выход должен быть 1 2 3 4.
Но на самом деле распечатать что-то вроде этого: 28495936 0 3 4.
Первые два элемента (например, 1 и 2), которые должны были вдвигаться в вектор, теряется или загрязняется.
Буду признателен, если кто-то может помочь мне разобраться в причинах этого.
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
class make_vector {
public:
typedef make_vector<T> my_type;
my_type& operator<<(const T& val)
{
data_.push_back(val);
return *this;
}
operator std::vector<T>&()
{
return this->data_;
}
private:
std::vector<T> data_;
};
int main() {
std::vector<int>& A2 = make_vector<int>() << 1 << 2 << 3 << 4;
for (std::vector<int>::iterator it = A2.begin(); it != A2.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
Я вижу проблему сейчас. Помогает! Благодарим Вас за разъяснения. – swm
Вам не требуется расширение для компиляции, благодаря плохо разработанному 'operator std :: vector &()'. Это действительно должно быть ref-qualit; и 'operator <<' должен, вероятно, также иметь две рефлексивные перегрузки, чтобы сохранить категорию значений. –
@ T.C. Я полностью пропустил это. Благодаря! – juanchopanza