Cha*_*l72 7 c++ containers std language-lawyer c++11
C++标准库提供了各种"概念",用于指定容器对象的接口.例如,std::vector
实现了Container
,Sequence
,RandomAccessContainer
,和ReversibleContainer
概念.
是否存在一个在C++ 03或C++ 11中指定的概念,它描述了一个Sequence
保证元素之间连续内存的概念,以便:
static_cast<void*>(&some_sequence[N]) == static_cast<void*>(&some_sequence[0] + N)>
这将是一个有用的概念,因为它告诉您是否可以将Container与任何需要连续内存缓冲区的函数一起使用,例如std::istream::read
.
我知道,在实践中,只有std::vector
(我认为只std::string
在C++ 11中)实际上保证了一个潜在的连续缓冲区 - 但这个保证是唯一的std::vector
还是有一个定义的"概念",它表示一个Sequence
提供连续内存的泛型类?
从 C++03 开始,仅std::vector
保证 (23.2.4.1):
向量的元素是连续存储的,这意味着如果 v 是一个向量,其中 T 是 bool 以外的某种类型,那么对于所有 0 <= n < v,它遵循恒等式 &v[n] == &v[0] + n 。尺寸()。
C++11 添加了 std::array,它是固定大小数组的包装器,并且也具有相同的属性。我认为没有办法知道任何容器是否具有这样的属性。