Возвращение объекта функцией

Есть простой класс

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.

Может я конечно на ровном месте …туплю…
но выражение
A a;
a = bar();
Я понимаю…
но вот это я не понимаю,…bar().foo();

Ну так это то же самое, только без переменной.

Так же как можно написать

b = sqrt(4) + 42;

вместо

a = sqrt(4);
b = a + 42;

У Вас в ваших примерах есть lvalue и rvalue, мне это понятно. А вот обращение функции через точку к созданному ей самой объекту, который сразу же ей и уничтожается… Не понимаю…

Возможно не сразу, надо стандарт С++ читать.

Например, такое насколько помню безопасно:


void f(char* cStr) {
    cout << cStr;
}

...

f(string("hello").c_str());

Точнее тут же копия объекта возвращается

Так что функция уже не причем.

Могу ошибаться, но похоже на говнокод

Отпечатали текст. Начали работать с переменной s, вызвали деструктор текста, объявили переменную s
Оптимизатор при сборке такую конструкцию возможно и обработает, но это существенно снижает производительность приложения в целом. Особенно будет заметно при больших объемах кода.

Так это ж просто демонстрация когда сработают конструкторы/деструкторы.

https://onlinegdb.com/B1TuoDvLO

Constructor 
Constructor 
 s =33
Destructor

------------------------
 s =33
Destructor

Это что и где? :thinking:

это деструктор
конструктора

На мой взгляд освоение предмета следует начинать с првильных примеров. Иначе не правильное станет правильным восприятием, правилом.

Так они ж тут не делают ничего, только вывод, чтобы знать когда они срабатывают в этом примере. Подобное обычно делают с целью углубления понимания принципов работы С++. Ну и для отладки.

bar().foo();
Меня интересует как функция вызывает метод класса.
А класс А это просто пример, все верно конструктор и деструктор они выводят время жизни

Никак. Она возвращает объект (копию в данном случае раз возвращаемое значение объявлено как просто А) и у него вызывается.