LINUX.ORG.RU

[C++] [экспертам] [в Development] [боян?] деструктор временного объекта при вызове функции

 


0

0

Будет ли работать правильно следующий код? Интересует поведение по стандарту, а не в какой-либо конкретной реализации.

#include <iostream> #include <string>

using namespace std;

void f(const char * t) { cout << t; }

int main() { string s = "Hello "; f((s + "World!").c_str()); }

// Не пишу в Development, ибо анонимус

anonymous

Будет ли работать правильно следующий код? Интересует поведение по стандарту, а не в какой-либо конкретной реализации.

#include <iostream>
#include <string>

using namespace std;

void f(const char * t) {
cout << t;
}

int main() {
string s = "Hello ";
f((s + "World!").c_str());
}

// Не пишу в Development, ибо анонимус

anonymous
()
Ответ на: комментарий от anonymous

Определение full-expression:

http://www.kuzbass.ru/docs/isocpp/intro.html#intro.execution
(пункт 1.9, подпункт 12)

Дальше по списку всех возможных expression'ов

http://www.kuzbass.ru/docs/isocpp/expr.html

понимаем, что перед нами full-expression. Итого, деструктор вызывается в любом случае после выполнения функции.

Legioner, спасибо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.