我正在阅读Bjarne Stroustrup的《C++程序设计语言》(第4版),在第516页上他说:
编译器如何知道何时可以使用移动操作而不是复制操作?在一些情况下,例如对于返回值,语言规则说明它可以(因为下一步操作被定义为销毁元素)
在第517页上,他还说到:
[该对象]具有移动构造函数,因此"按值返回"既简单又高效,也很"自然"
如果返回值总是使用移动操作,那么为什么以下内容不起作用?
编译器如何知道何时可以使用移动操作而不是复制操作?在一些情况下,例如对于返回值,语言规则说明它可以(因为下一步操作被定义为销毁元素)
在第517页上,他还说到:
[该对象]具有移动构造函数,因此"按值返回"既简单又高效,也很"自然"
如果返回值总是使用移动操作,那么为什么以下内容不起作用?
#include <vector>
#include <assert.h>
using namespace std;
vector<int> ident(vector<int>& v) {
return v;
};
int main() {
vector<int> a {};
const vector<int>& b = ident(a);
a.push_back(1);
assert(a.size() == b.size());
}
为什么a
和b
不指向同一个对象?