C++ 中的移动语义和 R 值引用弦乐构造

发布于 2024-12-07 17:53:53 字数 363 浏览 1 评论 0原文

C++11 是否会在参数字符串构造中移动语义和右值引用(例如

do_something_with_string(std::string("abc"))

假设声明),

void do_something_with_string(const std::string &);

从而可以防止 "abc" 的冗余堆复制?

如果是这样,它是否会不必要地使用 boost::const_string 中的 const char 包装器 boost::cref

Will C++11 move semantics and r-value references in argument string constructs such as

do_something_with_string(std::string("abc"))

assuming declaration for example

void do_something_with_string(const std::string &);

make it possible to prevent the redundant heap-copying of "abc"?

If so will it make use of the const char wrapper boost::cref in boost::const_string unneccesary?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别想她 2024-12-14 17:53:53

你不能这样移动数据。 const_string 具有 const char* 重载的原因是 const_stringconst。它的设计是不可变的。因此,它可以存储通过引用也是不可变的常量字符串,例如 const char*:字符串文字。

std::string 不是不可变的。即使您在其整个生命周期中仅通过 const& 来保存它,它仍然不是一个不可变的字符串。因此,它必须从 const char* 复制到自己的私有缓冲区中。

You can't move data like that. The reason const_string has that overload for const char* is because const_string is const. It is immutable by its design. Therefore, it can store constant strings which are also immutable by reference, like a const char*: a string literal.

std::string is not immutable. Even if you only hold it by const& for the entire duration of its life, it is still not an immutable string. Therefore, it must copy from a const char* into its own private buffer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文