Допустимо ли static_cast string_view в строку

Вы должны пропустить. Для вашего конкретного случая:

db.person.find().snapshot().forEach(
    function (elem) {
        db.person.update(
            {
                _id: elem._id
            },
            {
                $set: {
                    name: elem.firstname + ' ' + elem.lastname
                }
            }
        );
    }
);
14
задан newkid 16 January 2019 в 07:08
поделиться

2 ответа

static_cast<std::string>(sv) вызывает конструктор std::string::string, который ожидает преобразование любого типа в std::string_view ( подробнее ). Поэтому, да, он все еще создает совершенно новый объект std::string, который, в свою очередь, гарантирует последовательность символов с нулевым символом в конце.

0
ответ дан Mário Feroldi 16 January 2019 в 07:08
поделиться

Простой способ проверить, создает ли 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.

0
ответ дан JohnKoch 16 January 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: