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

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

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

#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 ()

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

Откопал кусок пруфлинка:

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

Пункт 12.2, подпункт 3.

Осталось показать, что там full-expression.

anonymous ()

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

Определение 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 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.