#include <conio.h>
#include <iostream>
using namespace std;
class A {
int i;
public:
A(int i) : i(i) { cout << i << endl; }
A(const A &o) : i(o.i) { cout << i << endl; }
~A() { cout << i << endl; }
friend A f(const A &, A, A *);
};
A f(const A &a, A b, A *c) { return *c; }
int main() {
f(1, A(2), &A(3));
}
выход: 1 3 2 3 2 3 3 1
может кто-то пожалуйста, помогите мне понять причину последовательности этого вывода?Может кто-нибудь объяснит мне причину и логику этого выхода?
У вас есть неопределенное поведение (взятие адреса временного объекта '& A (3)', а затем также разыменование 'c', которое является обвисшим указателем в' f'). Лучше исправить это, чтобы во избежание путаницы. – juanchopanza
Взятие адреса временного является неопределенным поведением. Кроме того, оценка параметров функции - неопределенное поведение. Так что весь этот вопрос довольно ошибочен. – Rapptz
Ну, это не очень полезно, возможно, создайте 3 объекта, которые печатают разные символы, поэтому мы можем различать три. –