我的问题是受到stackoverflow上这个答案的启发,链接如下:https://dev59.com/tFYN5IYBdhLWcg3wCELa#48082010。引用如下:
问:如何将
std::string_view
转换为const char*
?答:只需使用
std::string(string_view_object).c_str()
即可获得一个保证为空结尾的临时副本(并在行末清理它)。
不幸的是,它会构造一个新的string
。我想知道是否可以简单地执行以下操作:
static_cast<string>(string_view_object).c_str()
现在,我的问题是:
这是否构建了一个新的字符串?
它是否保证返回一个以空字符结尾的 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;
}
string
对象。我不知道你如何期望在没有副本的情况下将内容放置在 NUL 字符旁边。 - Ben Voigtstatic_cast<T>(o)
与T(o)
基本相同,都是将对象o
转换为类型T
。 - molbdnilo