我的问题是由stackoverflow上的这个答案引起的,https://stackoverflow.com/a/48082010/5360439。去引用,
问:你如何将 a 转换
std::string_view
为 aconst char*
?答:只需执行 a
std::string(string_view_object).c_str()
即可获得保证的空终止临时副本(并在行尾清理它)。
不幸的是,它构建了一个新的string
. 我想知道是否可以简单地做,
static_cast<string>(string_view_object).c_str()
现在,我的问题是:
这会构造一个新字符串吗?
是否保证返回一个以空字符结尾的字符序列?
我有一小段代码用于演示。它似乎工作正常。(查看魔杖盒结果)
#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;
}