小编Kob*_*ban的帖子

用std :: move返回std :: vector

我有一个非常基本的问题:返回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++ return move

9
推荐指数
1
解决办法
6219
查看次数

为什么在 std::deque 末尾或开头插入或删除元素的复杂度是常量 O(1)?

根据C++ 标准std::deque 是这样的

std::vector<std::array<T, M> *>
Run Code Online (Sandbox Code Playgroud)

如果是这样,那么在末尾或开头插入或删除元素怎么可能是常数 O(1)?如果超出向量的容量并且我们在末尾或开头插入一些内容,则不能保证整个向量不会被重新分配,所以我们有 0(N/M) 实际上是 0(N),不是吗?(N 是双端队列的大小)。

c++11

6
推荐指数
1
解决办法
338
查看次数

在C++中使用不正确的向下转换访问基类成员

以下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++标准对此有何看法?至少我没见过它曾经坠毁过.

c++ language-lawyer

2
推荐指数
1
解决办法
71
查看次数

标签 统计

c++ ×2

c++11 ×1

language-lawyer ×1

move ×1

return ×1