class A
{
public:
A() { cout << "Constructor \n"; }//Конструктор
void foo() { cout << " s =" <<s<< '\n'; };//Метод выводит значение s
~A() { cout << "Destructor\n"; }//Деструктор
int s{33};
};
A bar() { return A(); };//Функция принимает аргумент (класс) и возвращает класс
int main()
{
A a;//тут все понятно создаем объект класса
bar().foo();//А что тут? Функция принимает объект , возвращает создавая новый временный
// объект, и мы обращаемся к этому объекту через имя функции??!!
cout << "\n------------------------\n";
a.foo();
}
Мне бы хотелось понять смысл этих действий. Понятно что функция создает объект и уничтожает. Где можно дополнительно почитать…
За ранее благодарен.
Не понял что значит “через имя”, но тут же всё просто, функция возвращает какое-то значение и с этим значением можно что-то делать. Например, как с числами sqrt(4) + 42.
У Вас в ваших примерах есть lvalue и rvalue, мне это понятно. А вот обращение функции через точку к созданному ей самой объекту, который сразу же ей и уничтожается… Не понимаю…
Отпечатали текст. Начали работать с переменной s, вызвали деструктор текста, объявили переменную s
Оптимизатор при сборке такую конструкцию возможно и обработает, но это существенно снижает производительность приложения в целом. Особенно будет заметно при больших объемах кода.
Так они ж тут не делают ничего, только вывод, чтобы знать когда они срабатывают в этом примере. Подобное обычно делают с целью углубления понимания принципов работы С++. Ну и для отладки.
bar().foo();
Меня интересует как функция вызывает метод класса.
А класс А это просто пример, все верно конструктор и деструктор они выводят время жизни