将string_view static_cast为字符串是否合法?

Joh*_*och 14 c++ static-cast string-view

我的问题是由stackoverflow上的这个答案激发的,/sf/answers/3365740731/.报价,

问:你如何转换std::string_viewconst char*

答:只需做一个std::string(string_view_object).c_str()获得保证的以空值终止的临时副本(并在行尾清理它).

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

static_cast<string>(string_view_object).c_str()
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:

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

  2. 是否保证返回以null结尾的char序列?

我有一小段代码用于演示.它似乎工作正常.(参见wandbox 结果)

#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;
}
Run Code Online (Sandbox Code Playgroud)

Már*_*ldi 12

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

  • 字符串不是以 null 结尾的。c_str() 函数在末尾添加了 null。 (2认同)