gpt4 book ai didi

c++ - 为什么我的 C++ 移动构造函数没有被调用?

转载 作者:行者123 更新时间:2023-11-30 05:09:55 25 4
gpt4 key购买 nike

<分区>

我编写了一个名为 Str 的简单类,并重写了它的构造函数、复制构造函数和移动构造函数。

class Str
{
public:
Str(const char* s) :m_data(NULL)
{
printf("constructor\n");
int size = strlen(s) + 1;
m_data = new char[size];
strncpy_s(m_data, size, s, size);
}

Str(const Str &s)
{
printf("copy constructor\n");
int size = strlen(s.m_data) + 1;
m_data = new char[size];
strncpy_s(m_data, size, s.m_data, size);
}

Str(Str &&s)
{
printf("move constructor\n");
m_data = s.m_data;
s.m_data = NULL;
}

public:
char* m_data;
};

现在我有这样一个函数想要调用它的移动构造函数:

void speak(Str &&s)
{
}
Str getStr()
{
Str s("cat");
return s;
}

如果我这样尝试,可以调用移动构造函数。

speak(getStr());

它的输出是:

constructor
move constructor

因为 getStr() 是一个临时值,所以调用了移动构造函数,对吧?但如果我这样尝试,它就不行。

speak(Str("cat"));

它的输出是:

constructor

我不明白的是 Str("cat") 也是一个临时值。但它只调用了构造函数!为什么??

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