gpt4 book ai didi

c++ - C++17 std::basic_string_view 是否会使 C 字符串的使用无效?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:28 25 4
gpt4 key购买 nike

C++17 正在引入 std::basic_string_view,它是非拥有字符串版本,其类仅存储指向字符串第一个元素的指针和字符串的大小。还有理由继续使用 C 字符串吗?

最佳答案

Is there still a reason to keep using C strings?

我认为可以公平地说,除了使用 C API 之外,从来没有有理由使用 C 字符串。

在设计只需要字符的只读表示的函数或方法的接口(interface)时,您会更喜欢 std::string_view。例如。搜索字符串、生成大写拷贝、打印它等等。

在设计一个接受字符串拷贝的接口(interface)时,您可能应该更喜欢第一个和最后一个迭代器。然而,std::string_view 可以被认为是这些迭代器的代理,因此 string_view 是合适的。

如果您想获得一个长字符串的所有权,可能更喜欢通过值或右值引用传递 std::string

当设计一个对象来编码对期望以 null 结尾的字符串的 c API 的调用时,您应该更喜欢 std::string 或 std::string const& - 因为它的 c_str() 方法将正确地产生一个以 null 结尾的字符串。

在对象(不是临时代理)中存储字符串时,首选 std::string。

当然,在 C++ 中使用 const char* 作为数据的所有者是不合适的。总有更好的方法。自 c++98 以来就是如此。

关于c++ - C++17 std::basic_string_view 是否会使 C 字符串的使用无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43040647/

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