gpt4 book ai didi

c++ - std::move(std::string) 不使传递的参数为空状态

转载 作者:行者123 更新时间:2023-12-03 08:29:56 26 4
gpt4 key购买 nike

我有点困惑为什么 std::move(std::string) 没有将传递的 std::string 参数设置为空状态(我的意思是std::string 大小为 0,其内部缓冲区在调用 std::move(std::string) 后指向 nullptr) 。这是示例代码

#include <iostream>
#include <string>

void print(std::string& str) {
std::cout << "lref\n";
std::cout << str << "\n" << std::endl;
}

void print(const std::string& str) {
std::cout << "const lref\n";
std::cout << str << "\n" << std::endl;
}

void print(std::string&& str) {
std::cout << "rref\n";
std::cout << str << "\n" << std::endl;
}

int main() {
std::string str_a = "Hello, ";
std::string str_b = "world!";

print(str_a);
print(str_b);
print(str_a + str_b);

print(std::move(str_a));
print(str_a); // was expecting str_a to be empty but still prints Hello,

return 0;
}

最佳答案

std::move 没有移动任何东西。它将其参数转换为右值引用。要实际移动,您需要将 str 作为 rvalue-reference 传递,以移动另一个字符串的构造函数(或移动赋值),如下所示。

std::string new_str(std::move(str));
print(str);

关于c++ - std::move(std::string) 不使传递的参数为空状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65426585/

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