Я использовал какой-то другой класс, который работал нечетно, когда я ввел его в вектор. Он включает переменную-член, которая является ссылкой на другую переменную-член. Вот самый маленький самодостаточный пример:
#include <iostream>
#include <vector>
class Myclass {
public:
Myclass() : a(1.0) {}
float a;
float &a_ref = a;
void addOne() {
a = a + 1.0;
}
};
int main() {
Myclass instance1;
instance1.addOne();
//prints 2:
std::cout << "instance.a_ref is " << instance1.a_ref << std::endl;
std::vector<Myclass> vec;
Myclass instance2;
vec.push_back(instance2);
vec.at(0).addOne();
//prints 1;
std::cout << "vec.at(0).a_ref is " << vec.at(0).a_ref << std::endl;
return 0;
}
Я компилировал с g++
и -std=c++11
, поэтому я некоторое время не замечал проблему. Теперь я вижу, что проблема связана, вероятно, с синтезированным конструктором копии и ссылочным элементом. Но я не уверен в следующем:
- Почему существует другое поведение, когда объект находится в векторе?
- Почему
g++
не дает никаких предупреждений об этом, используя стандарт С++ 11?
Бонусный вопрос, потому что мне любопытно:
- Что инициализируется сначала,
a
илиa_ref
?