gpt4 book ai didi

c++ - 连接两个 move 的字符串

转载 作者:行者123 更新时间:2023-11-30 01:22:15 27 4
gpt4 key购买 nike

下面的代码:

#include <iostream>
#include <string>
using namespace std;

int main() {
string s1 = "hello";
string s2 = "my";
string s3 = "world";
string s4;
s4 = move(s1) + move(s2) + move(s3);
cout << "s4(" << s4 << ") = s1(" << s1 << ") + s2(" << s2 << ") + s3(" << s3 << ")"<< endl;
}

给出以下输出:

s4(hellomyworld) = s1() + s2(my) + s3(world)

你能解释一下这是怎么回事吗? (使用 XCode 4.6.1 测试)

编辑:我希望看到: s4(hellomyworld) = s1() + s2() + s3()

最佳答案

我假设您期望 s4(hellomyworld) = s1() + s2() + s3()

首先, move 使源对象处于“具有未指定值的有效状态”([C++11: 21.4.2/2]) — 也就是说,您可以在您从字符串中移出后,不要对字符串的值做出任何声明。

其次,std::move 用词不当,因为它实际上并没有 move 任何东西。 move 是通过交换东西来实现的,并且不能保证你的 string operator+ 会做任何类似的事情(参见 jmihalicza 的回答示例实现); std::move 所做的只是获取一个右值引用,可以 从中 move 。

[C++11: 21.4.6.3/1] 说到 std::basic_string& assign(basic_string&& str) noexcept (这是你真正想要的功能调用,当你跟随 operator+ 的所有面包屑时)“一个有效的实现是 swap(str)”,但这并不意味着交换 发生。

关于c++ - 连接两个 move 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747714/

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