#include <iostream>
const int * funct(const int &x) { return &x; }
struct Integer {
int value;
Integer(const int &value) : value(value) { std::cout << "Created: " << this << std::endl; }
~Integer() { std::cout << "Destroyed: " << this << std::endl; }
};
const Integer * funct2(const Integer &x) { return &x; }
int main()
{
int a = 3, b = 4;
// different addresses
std::cout << funct(a) << std::endl;
std::cout << funct(b) << std::endl;
// same address
std::cout << funct(3) << std::endl;
std::cout << funct(4) << std::endl;
// different addresses
std::cout << funct(3) << std::endl << funct(4) << std::endl;
std::cout << "----------" << std::endl;
// same address
std::cout << funct2(3) << std::endl;
std::cout << funct2(4) << std::endl;
// different addresses
std::cout << funct2(3) << std::endl << funct2(4) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY29uc3QgaW50ICogZnVuY3QoY29uc3QgaW50ICZ4KSB7IHJldHVybiAmeDsgfQoKc3RydWN0IEludGVnZXIgewoJaW50IHZhbHVlOwoJSW50ZWdlcihjb25zdCBpbnQgJnZhbHVlKSA6IHZhbHVlKHZhbHVlKSB7IHN0ZDo6Y291dCA8PCAiQ3JlYXRlZDogIiA8PCB0aGlzIDw8IHN0ZDo6ZW5kbDsgfQoJfkludGVnZXIoKSB7IHN0ZDo6Y291dCA8PCAiRGVzdHJveWVkOiAiIDw8IHRoaXMgPDwgc3RkOjplbmRsOyB9Cn07Cgpjb25zdCBJbnRlZ2VyICogZnVuY3QyKGNvbnN0IEludGVnZXIgJngpIHsgcmV0dXJuICZ4OyB9CgppbnQgbWFpbigpCnsKCWludCBhID0gMywgYiA9IDQ7CgoJLy8gZGlmZmVyZW50IGFkZHJlc3NlcwoJc3RkOjpjb3V0IDw8IGZ1bmN0KGEpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBmdW5jdChiKSA8PCBzdGQ6OmVuZGw7CgoJLy8gc2FtZSBhZGRyZXNzCglzdGQ6OmNvdXQgPDwgZnVuY3QoMykgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8IGZ1bmN0KDQpIDw8IHN0ZDo6ZW5kbDsKCgkvLyBkaWZmZXJlbnQgYWRkcmVzc2VzCglzdGQ6OmNvdXQgPDwgZnVuY3QoMykgPDwgc3RkOjplbmRsIDw8IGZ1bmN0KDQpIDw8IHN0ZDo6ZW5kbDsKCglzdGQ6OmNvdXQgPDwgIi0tLS0tLS0tLS0iIDw8IHN0ZDo6ZW5kbDsKCQoJLy8gc2FtZSBhZGRyZXNzCglzdGQ6OmNvdXQgPDwgZnVuY3QyKDMpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBmdW5jdDIoNCkgPDwgc3RkOjplbmRsOwoKCS8vIGRpZmZlcmVudCBhZGRyZXNzZXMKCXN0ZDo6Y291dCA8PCBmdW5jdDIoMykgPDwgc3RkOjplbmRsIDw8IGZ1bmN0Mig0KSA8PCBzdGQ6OmVuZGw7Cn0=