У меня есть очень простой кусок кода для тестирования:
std::string a = "A"std::string b = "B"
std::cout << a + b << std::endl;
Хотя он работает в GNU G ++, я беспокоюсь, если он является переносимым для передачи временного a + b
в std::cout
гарантируется ли std :: cout получение правильного фрагмента памяти?
Большое спасибо!
Это безопасно. Временный не будет уничтожен, пока не будет обработан cout
,
Для получения дополнительной информации см. Когда временные фильтры создаются как часть вызова функции?
Да — a+b
создает временный std::string
объект, который передается std::cout
, В конце полного выражения, в котором он был создан, этот временный объект будет уничтожен, но не раньше, поэтому он останется действительным до конца выражения.
Кроме того, временная почти такая же, как и любая другая std::string
объект, поэтому тот факт, что это временный объект, не имеет отношения к тому, как он обрабатывается std::cout
,