Вы должны пропустить. Для вашего конкретного случая:
db.person.find().snapshot().forEach(
function (elem) {
db.person.update(
{
_id: elem._id
},
{
$set: {
name: elem.firstname + ' ' + elem.lastname
}
}
);
}
);
static_cast<std::string>(sv)
вызывает конструктор std::string::string
, который ожидает преобразование любого типа в std::string_view
( подробнее ). Поэтому, да, он все еще создает совершенно новый объект std::string
, который, в свою очередь, гарантирует последовательность символов с нулевым символом в конце.
Простой способ проверить, создает ли static_cast<std::string>(sv)
новую строку, - проверить, может ли она изменить исходную строку.
#include <string>
#include <iostream>
#include <string_view>
#include <cstring>
int main()
{
std::string str{"0123456789"};
std::string_view sv = str;
std::cout << sv << std::endl;
static_cast<std::string>(sv)[0] = 'a';
std::cout << static_cast<std::string>(sv) << std::endl;
}
sv
остается без изменений, поэтому он создает новую строку.
Смотрите результаты на wandbox.