Не могли бы вы взглянуть на эти 2 примера и объяснить, почему первый результат печати дал мне неправильный номер?Передача C++ возвращала ссылку непосредственно на функцию
Первый пример (printRes передать х на указатель):
int& getInt(int x){
x++;
cout << "int " << x << endl;
return x;
}
void printRes(int *x){
cout << "res " << *x << endl;
}
int main()
{
int t = getInt(5);
printRes(&getInt(5)); // first attemp
printRes(&t); // second attemp
return 0;
}
Второй пример (printRes передать х посредством ссылки):
int& getInt(int x){
x++;
cout << "int " << x << endl;
return x;
}
void printRes(int &x){
cout << "res " << x << endl;
}
int main()
{
int t = getInt(5);
printRes(getInt(5)); // first attemp
printRes(t); // second attemp
return 0;
}
Результаты:
int 6
int 6
res 2686640
res 6
Когда я пройти «x» по значению работает нормально, но моя цель - получить что-то вроде этого:
- функция GetInt создает объект, помещает его в вектор (так что я просто называю v.emplace_back()) и возвращает ссылку на данный момент добавлен объект (v.back())
- значение, возвращенное GetInt передается printRes который заполняет объект со значениями из файла
Я не хочу создавать временные переменные, такие «т», но передать векторный элемент непосредственно к функции printRes, но в моем более расширенном случае у меня есть сбои в деструкторов (или иногда в некоторых случайных места).
Вы можете [спросить у компилятора] (http://coliru.stacked-crooked.com/a/d20873013cc5dd8b): * предупреждение: ссылка на стек памяти, связанная с локальной переменной 'x', возвращена * – chris
Спасибо, теперь я см. проблему. Интересно Visual не сообщает об этом waring. – Harry
В предварительном просмотре VS2015 я получаю * предупреждение C4172: возвращающий адрес локальной переменной или временный: x *. Я не знаю о других версиях. – chris