【发布时间】:2020-05-28 20:12:02
【问题描述】:
我想做的是让我的班级在构造过程中接受一个字符串。我读到string_view 是const string& 的替代品,所以我很自然地写了一个这样的构造函数。这让我可以接受 c++ 和 c 字符串。
Url::Url(boost::string_view raw_url)
: url_(static_cast<std::string>(raw_url)) {
这里可能存在的问题是,当传递一个右值时,会有一个不必要的副本而不是移动。是制作另一个采用string&& 的构造函数的解决方案吗?这里的最佳做法是什么?
【问题讨论】:
-
应该移入一些数据的构造函数通常只接受值,而不是右值引用。这更简单。
-
创建一个构造函数,按值获取参数并将其移动到
url_。 -
重点是移入会员
url_(std::move(raw_url)),那么你只会得到一份。对于左值,您将获得额外的移动,但您只需要编写一个处理所有情况的构造函数。与我猜想的更多样板代码相比,这取决于额外移动对性能的重要性。
标签: c++ string-view