c++ - 将 string_view 静态转换为字符串是否合法
问题描述
我的问题是由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;
}
解决方案
static_cast<std::string>(sv)
正在调用std::string::string
期望任何类型可转换为std::string_view
(更多详细信息)的构造函数。因此,是的,它仍在创建一个全新的std::string
对象,这反过来又保证了一个以空字符结尾的字符序列。
推荐阅读
- python - 如何使用数据框中的正确数据创建子图
- typescript - 在 TypeScript 中将对象数组转换为单个对象和映射类型
- c# - 在 TFS 中,当用户名为空且日期范围为空时,VersionControlServer.QueryHistory API 不起作用
- sql - 具有优先级的 SQL MAX(col1, col2)
- php - 注册 Laravel Jetstream 后如何显示消息
- json - 基于具有 JSON 值的列的 Laravel Eloquent Join 无法正常工作
- mysql - AWS RDS(MySQL) 无法编辑参数
- python - 试图从对象列中获取平均值(Pandas-Python)但得到 TypeError: can only concatenate str (not "float") to str
- android - Android studio) logcat 不会打印出任何自定义消息
- spring-mvc - SpringMVC websocket在连接后立即断开