相关疑难解决方法(0)

C++相当于StringBuffer/StringBuilder?

是否有C++标准模板库类提供有效的字符串连接功能,类似于C#的StringBuilder或Java的StringBuffer

c++ stl string-concatenation

164
推荐指数
7
解决办法
17万
查看次数

我何时会传递const&std :: string而不是std :: string_view?

我理解使用std :: string_view的动机;
它可以帮助避免函数参数中的不必要的分配.

例如:
以下程序将从std::string字符串文字创建一个.
这会导致不希望的动态分配,因为我们只对观察字符感兴趣.

#include <iostream>

void* operator new(std::size_t n)
{
    std::cout << "[allocating " << n << " bytes]\n";
    return malloc(n);
}

void observe_string(std::string const& str){}

int main(){
  observe_string("hello world"); //prints [allocating 36 bytes]
}
Run Code Online (Sandbox Code Playgroud)

使用string_view将解决问题:

#include <iostream>
#include <experimental/string_view>

void* operator new(std::size_t n)
{
    std::cout << "[allocating " << n << " bytes]\n";
    return malloc(n);
}

void observe_string(std::experimental::string_view const& str){
}

int main(){
  observe_string("hello world"); //prints nothing
}
Run Code Online (Sandbox Code Playgroud)

这给我留下了一个问题. …

c++ string stl parameter-passing string-view

19
推荐指数
3
解决办法
1966
查看次数

连接 string_view 对象

我一直std::string_view在一些旧代码中添加 s 来表示配置参数等字符串,因为它提供了只读视图,由于不需要复制,速度更快。

string_view但是,由于operator+未定义,因此无法将两个连接在一起。我看到这个问题有几个答案表明它是一个疏忽,并且有一个建议添加它。但是,这是添加 astring和 a string_view,大概如果实现的话,生成的串联将是std::string

添加两个string_view也属于同一类别吗?如果不是,为什么不string_view支持添加两个?

样本

std::string_view s1{"concate"};
std::string_view s2{"nate"};
std::string_view s3{s1 + s2};
Run Code Online (Sandbox Code Playgroud)

这是错误

error: no match for 'operator+' (operand types are 'std::string_view' {aka 'std::basic_string_view<char>'} and 'std::string_view' {aka 'std::basic_string_view<char>'})
Run Code Online (Sandbox Code Playgroud)

c++ string-concatenation string-view c++17

10
推荐指数
3
解决办法
1万
查看次数