yng*_*ccc 7 c++ c++11
我有一个功能
struct foo { std::vector<int> v; }; foo func();
从函数返回时,foo中的向量是否会被移动或复制?
And*_*owl 8
它会被移动.(*)
由于您没有为您的foo类提供显式移动构造函数,因此编译器将隐式生成一个为您调用类的所有成员的移动构造函数(如果可用).由于std::vector定义了一个移动构造函数,因此将调用它.
foo
std::vector
根据C++ 11标准的第12.8/15段:
非联合类X的隐式定义的复制/移动构造函数执行其基础和成员的成员复制/移动.[...]
另请注意,在按值返回对象时,允许编译器忽略对类的复制/移动构造函数的调用.此优化称为(命名)返回值优化.
(*)我在这里假设您的用例是创建一个内部自动存储的本地对象foo()并将其返回.
foo()
归档时间:
13 年,7 月 前
查看次数:
7809 次
最近记录: