Joh*_*ing 2 c++ language-lawyer c++11
考虑:
#include <vector>
int main()
{
std::vector <int> v;
v.reserve (100);
v[1] = 42;
}
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码调用了未定义的行为,因为在调用站点v[1],根据的向量大小v.size()是<1.(它是零.)
但是,我花了大约一小时左右的时间来查看C++标准,以便直接或间接地澄清这实际上是未定义的行为.
也许我错过了显而易见的事.你能提供至少C++ 03以及可选的C++ 11标准的引用或引用吗?
Nic*_*las 11
这是如何operator[]界定的产物.在§23.2.3[sequence.rqmts]表101中,操作语义operator[]被定义为*(a.begin() + n).所以它是根据迭代器定义的.根据§24.2.1/ 5 [iterator.requirements.general] ,递增begin过去end和取消引用它是未定义的行为.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |