首页 > 解决方案 > 将 string_view 静态转换为字符串是否合法

问题描述

我的问题是由stackoverflow上的这个答案引起的,https://stackoverflow.com/a/48082010/5360439。去引用,

问:你如何将 a 转换std::string_view为 a const char*

答:只需执行 astd::string(string_view_object).c_str()即可获得保证的空终止临时副本(并在行尾清理它)。

不幸的是,它构建了一个新的string. 我想知道是否可以简单地做,

static_cast<string>(string_view_object).c_str()

现在,我的问题是:

  1. 这会构造一个新字符串吗?

  2. 是否保证返回一个以空字符结尾的字符序列?

我有一小段代码用于演示。它似乎工作正常。(查看魔杖盒结果

#include <string>
#include <iostream>
#include <string_view>
#include <cstring>

int main()
{
  std::string str{"0123456789"};
  std::string_view sv(str.c_str(), 5);

  std::cout << sv << std::endl;
  std::cout << static_cast<std::string>(sv) << std::endl;
  std::cout << strlen(static_cast<std::string>(sv).c_str()) << std::endl;
}

标签: c++static-caststring-view

解决方案


static_cast<std::string>(sv)正在调用std::string::string期望任何类型可转换为std::string_view更多详细信息)的构造函数。因此,是的,它仍在创建一个全新的std::string对象,这反过来又保证了一个以空字符结尾的字符序列。


推荐阅读