我有以下代码:
//void func(const std::string &&i){
//void func(const std::string &i){
void func(const std::string i){
std::string val{i};
}
int main()
{
std::string d = "asdf";
func(std::move(d));
std::cout << d << std::endl;
}
当i
是按值传递时,d
变为空,但d
如果我们通过引用或右值引用传递,则保留其形式。有人可以解释发生了什么吗?
我知道这std::move
实际上并没有移动任何东西,而是通过将其转换为 xvalue 来使它所接收的变量可移动。
d
顺便说一句,如果将当前状态的代码强制转换为 x 值,为什么会编译?func
当前设置为通过值参数而不是通过右值引用传入。