【发布时间】:2019-01-16 06:22:01
【问题描述】:
我的问题是由 stackoverflow 上的这个答案引起的,https://stackoverflow.com/a/48082010/5360439。引用,
问:如何将
std::string_view转换为const char*?答:只需执行
std::string(string_view_object).c_str()即可获得保证为空终止的临时副本(并在行尾清理它)。
不幸的是,它构造了一个新的string。我想知道是否可以简单地做,
static_cast<string>(string_view_object).c_str()
现在,我的问题是:
-
这会构造一个新字符串吗?
-
是否保证返回一个以空字符结尾的字符序列?
我有一小段代码用于演示。它似乎工作正常。 (参见魔杖盒results)
#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 字符旁边。 -
static_cast<T>(o)与T(o)几乎相同。 -
请不要在有人发布答案后添加基本上回答您问题的验证。它使那个人的努力无效。如果问题的回答令您满意,请接受该答案。或者用您自己的解决方案发布另一个答案。 SO 是一个问答网站。问题属于问题框,答案属于答案部分。
-
@StoryTeller 抱歉,我并不是要让其他人的努力无效。我以前从未回答过我的问题,所以我的第一个想法是通过编辑问题来发布我的答案。感谢您向我解释规则。
-
不用担心。我知道没有恶意。如果您想出一些对自己有用的东西并认为其他人可能会受益,也不要害怕回答自己的问题。实际上是highly encouraged :)
标签: c++ static-cast string-view