Передача временного объекта в std :: cout

У меня есть очень простой кусок кода для тестирования:

std::string a = "A"std::string b = "B"
std::cout << a + b << std::endl;

Хотя он работает в GNU G ++, я беспокоюсь, если он является переносимым для передачи временного a + b в std::coutгарантируется ли std :: cout получение правильного фрагмента памяти?

Большое спасибо!

1

Решение

Это безопасно. Временный не будет уничтожен, пока не будет обработан cout,

Для получения дополнительной информации см. Когда временные фильтры создаются как часть вызова функции?

5

Другие решения

Да — a+b создает временный std::string объект, который передается std::cout, В конце полного выражения, в котором он был создан, этот временный объект будет уничтожен, но не раньше, поэтому он останется действительным до конца выражения.

Кроме того, временная почти такая же, как и любая другая std::string объект, поэтому тот факт, что это временный объект, не имеет отношения к тому, как он обрабатывается std::cout,

2

По вопросам рекламы [email protected]