考虑下面的代码:修改std :: set的元素 - 定义的行为?
#include <set>
struct X {
int a, b;
friend bool operator<(X const& lhs, X const& rhs) {
return lhs.a < rhs.a;
}
};
int main() {
std::set<X> xs;
// some insertion...
auto it = xs.find({0, 0}); // assume it != xs.end()
const_cast<X&>(*it).b = 4; // (1)
}
是(1)
定义的行为?也就是说,我允许const_cast
提及从const_iterator
获得的元素的引用,如果修改不会改变排序,那么可以修改它吗?
我已经阅读了一些帖子,在这里和那里提出这种const_cast
,但我想知道这是否是实际定义的行为。