4
我是否理解C++ 14标准库使用移动语义?换句话说,我可以确信我在下面的程序中使用移动而不是副本:如何知道我是否正在使用复制或移动?
#include <iostream>
#include <string>
#include <vector>
using namespace std::string_literals;
std::vector<std::string> greeting()
{
std::vector<std::string> vs {"hello"s, "world"s};
return vs;
}
int main()
{
std::vector<std::string> s = greeting();
std::cout << s[0] << " " << s[1] << "\n" ;
}
有没有办法检查?
如何在下面的例子:
#include <iostream>
#include <string>
#include <vector>
using namespace std::string_literals;
class Greeting {
public:
std::string first, second;
Greeting() { first = "hello"s ; second = "world"s ;};
};
Greeting greetingc()
{
Greeting g;
return g;
}
int main()
{
Greeting g = greetingc();
std::cout << g.first << " " << g.second << "\n" ;
}
移动或复制?
你究竟在哪里检查?什么行代码应该是一个举动? – rubenvb
@rubenvb我的意思是,当从greeting(0或greetingc())中调用return语句时,程序会做什么:它是复制对象(可能是一个昂贵的操作)还是它移动对象(便宜的操作)。 – blippy
一般而言,无论何时创建临时对象,您无权访问该对象,都可以成为“移动语义”的良好选择。 – sameerkn