相关疑难解决方法(0)

C++ 11是否允许vector <const T>?

容器需求已从C++ 03更改为C++ 11.虽然C++ 03有一揽子要求(例如复制构造性和向量的可赋值性),但C++ 11定义了每个容器操作的细粒度要求(第23.2节).

因此,只要您只执行某些不需要赋值的操作(构造并且push_back是这样的操作),您可以例如在向量中存储可复制构造但不可赋值的类型(例如具有const成员的结构).; insert不是).

我想知道的是:这是否意味着标准现在允许vector<const T>?我没有看到任何理由它不应该 - const T就像具有const成员的结构一样,是一种可复制构造但不可分配的类型 - 但我可能错过了一些东西.

(让我觉得我可能错过了一些东西的部分原因是,如果你试图实例化vector<const T>,那gcc trunk会崩溃并烧掉,但是vector<T>对于T有const成员的地方来说很好).

c++ const vector c++11

65
推荐指数
4
解决办法
1万
查看次数

是否可以移动boost :: optional?

我一直试图在一个带有boost::optional成员变量的类中定义一个默认的移动构造函数.

#include <boost/optional.hpp>
#include <utility>
#include <vector>

struct bar {std::vector<int> vec;};

struct foo {
  foo() = default;
  foo(foo&&) = default;
  boost::optional<bar> hello;
};

int main() {
  foo a;
  foo b(std::move(a));
}
Run Code Online (Sandbox Code Playgroud)

我的编译器支持移动语义和默认的移动构造函数,但我不能让它工作.

% clang++ foo.cc -std=c++11 -stdlib=libc++
foo.cc:15:7: error: call to deleted constructor of 'foo'
  foo b(std::move(a));
      ^ ~~~~~~~~~~~~
foo.cc:9:3: note: function has been explicitly marked deleted here
  foo(foo&&) = default;
  ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

有没有办法移动a boost::optional 而不修改Boost的源代码?或者我应该等到Boost支持移动?

我过去遇到了同样的问题boost::any.

c++ boost move-semantics c++11 boost-optional

25
推荐指数
2
解决办法
6500
查看次数

标签 统计

c++ ×2

c++11 ×2

boost ×1

boost-optional ×1

const ×1

move-semantics ×1

vector ×1