考虑以下:
std::vector<int> vec(1); // vector has one element
std::fill(vec.begin(), vec.begin(), 42);
std::fill(vec.begin()+1, vec.end(), 43);
std::fill(vec.end(), vec.end(), 44);
Run Code Online (Sandbox Code Playgroud)
std::fill上面的所有用法都会导致定义的行为吗?我保证vec将保持不变吗?我倾向于认为"是",但我想确保标准允许这样的使用.
不,如果不会导致未定义的行为.
该标准定义了24.1/7中的空迭代器范围,并且它没有说明为std::fill算法提供空范围会导致未定义的行为.
这实际上是人们对经过深思熟虑的实施所期望的.使用自然处理emtpy范围的算法,强制要求检查调用者的空范围将是一个严重的设计错误.
| 归档时间: |
|
| 查看次数: |
627 次 |
| 最近记录: |