gpt4 book ai didi

c++ - 如何将 std::string_view 转换为 const char*?

转载 作者:IT老高 更新时间:2023-10-28 22:16:09 26 4
gpt4 key购买 nike

使用带有 -std=c++17 标志的 gcc-7.1 编译,以下程序会引发错误:

#include <string_view>
void foo(const char* cstr) {}
void bar(std::string_view str){
foo(str);
}

错误信息是

In function 'void bar(std::string_view)':
error: cannot convert 'std::string_view {aka std::basic_string_view<char>}' to 'const char*' for argument '1' to 'void foo(const char*)'
foo(str);

我很惊讶没有转换为 const char* 因为其他库(abseil、bde)提供了类似的 string_view 类隐式转换为 const char*.

最佳答案

std::string_view 不提供到 const char* 的转换,因为 它不存储以 null 结尾的字符串。它基本上存储了指向第一个元素的指针和字符串的长度。这意味着您不能将它传递给期望以 null 结尾的字符串的函数,例如期望 const char*,所以决定不值得。

如果您确定您的 View 中有一个以空字符结尾的字符串,您可以使用 std::string_view::data .

如果你不是,你应该重新考虑是否首先使用 std::string_view 是一个好主意,因为如果你想要一个有保证的以 null 结尾的字符串 std::string 是你想要的。对于单行,您可以使用 std::string(object).data() (note:返回值指向一个 temporary std::string 实例将在表达式结束后被销毁!)。

关于c++ - 如何将 std::string_view 转换为 const char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48081436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com