该标准在§5.7/ 4中规定:
当向指针添加或从指针中减去具有整数类型的表达式时,结果具有指针操作数的类型.如果指针操作数指向数组对象的元素,并且数组足够大,则结果指向偏离原始元素的元素,使得结果元素和原始数组元素的下标的差异等于整数表达式.[...]此外,如果表达式P指向数组对象的最后一个元素,则表达式(P)+1指向一个超过数组对象的最后一个元素,如果表达式Q指向一个超过最后一个元素对于数组对象,表达式(Q)-1指向数组对象的最后一个元素.如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定义.
(强调我的)
对于§5.7/ 5中的减法,可以找到类似的引用.因此,如果溢出和下溢是超出它们最初指向的对象边界的指针的特殊情况,则行为将是未定义的.
我会说你有可能宣布这些功能noexcept.
作为旁注,标准库中类似指针的类型std::unique_ptr不会定义可能导致上述未定义行为的函数noexcept(例如operator[]for std::unique_ptr),因为某些实现决定在调试模式下抛出异常.
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |