我有一个非常基本的问题:返回std::vector<A>使用std::move是否是一个好主意?例如:
class A {};
std::vector<A> && func() {
std::vector<A> v;
/* fill v */
return std::move(v);
}
Run Code Online (Sandbox Code Playgroud)
我应该返回std::map,std::list..等等......这样?
根据C++ 标准std::deque 是这样的
std::vector<std::array<T, M> *>
Run Code Online (Sandbox Code Playgroud)
如果是这样,那么在末尾或开头插入或删除元素怎么可能是常数 O(1)?如果超出向量的容量并且我们在末尾或开头插入一些内容,则不能保证整个向量不会被重新分配,所以我们有 0(N/M) 实际上是 0(N),不是吗?(N 是双端队列的大小)。
以下C++代码是否正确?
struct Base { int x; };
struct Derived : Base { int y; }
Base * b = new Base;
Derived * d = static_cast<Derived *>(b);
//below we access only d->x, but not d->y
std::cout << d->x;
Run Code Online (Sandbox Code Playgroud)
如果没有,究竟出了什么问题?C++标准对此有何看法?至少我没见过它曾经坠毁过.