我有一个函数:这里所做的操作的确切顺序是什么?
std::string makeMeat() { return "Pork"; }
而且某处代码,我使用这种方式:
std::string meat = makeMeat();
我想知道的是这行代码进行的操作的确切顺序。假设两种不同的情况:
- 的std :: string有没有转移构造函数(只是举例)
- 的std :: string具有移动构造
我猜makeMeat()
创建std::string
类的临时对象。
std::string temp("Pork");
是std::string meat
对象被创建后,并通过从temp
对象数据的拷贝构造函数初始化?
std::string meat(temp);
最后temp
对象被破坏?
我认为如果没有返回值优化,就会发生这种情况。 如果是这样会怎样?
这是非常简单的测试自己。您可以使用所需的构造函数和函数创建自己的类,而不是使用'std :: string',它们在被调用时会打印一条消息。然后你可以看到自己会发生什么。 –
@JoachimPileborg有了像复制elision这样的东西,我会说“自己尝试一下”的确会给你一个答案,但是并不能反映出所有必须发生的事情,可能发生的事情,需要提供的东西等。 – Angew