考虑以下代码:
vector<uint8_t> v(1);
v.reserve(2);
uint8_t *data = &v.front();
data[1] = 0;
Run Code Online (Sandbox Code Playgroud)
是否存在未定义的行为(C++ 98,C++ 03,C++ 11)?
如果是的话,获得RAII缓冲区(不使用C++ 11)的最佳方法是什么?
v.front()无论什么时候调用都是未定义的行为v.empty().v[n]除非是调用未定义的行为n < v.size().此外,保留的内存中没有对象,因此您不能将内存视为对象.矢量只有guranatees
这
[data(), data() + size())是一个有效的范围
并且无法保证有更大的有效范围.(请注意data() == &front(),这适用于您的代码.)
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |