是否应该避免从非const迭代器到const迭代器的转换?

Lou*_*tra 1 c++ iterator const-iterator

我试图比较a const iterator和a,non-const iterator但不确定它是否正常,所以我查了一下.由于隐式转换为non-const iterator,我发现它没问题const iterator.但是,我想知道您是否应该不要比较这些迭代器,以避免这种转换.例如,

begin_iterator = buf.begin();  end_iterator = buf.cend();
for (; begin_iterator != end_iterator; ++begin_iterator) { ... }
Run Code Online (Sandbox Code Playgroud)

通常,我会认为这是正常的,因为const意味着只读,这很好.但是,我不确定(不必要的)转换.

Mat*_*her 5

将非常量迭代器转换为常量迭代器总是很好,就像将非常量指针转换为常量指针一样.

相反的不是你想要做的事情,它可能导致崩溃(例如,因为数据存储在const only空间中).所以永远不要这样做.

  • 如果数据实际上不是const,则不是未定义的行为.例如`int a = 1; const int*b =&a;*const_cast <int*>(b)= 3;`很好 (2认同)
  • 同意,如果你知道数据的来源.但总的来说,你没有,所以它是UB. (2认同)
  • 嗯,总的来说,你不知道它是否是UB,所以你就是不要这样做 (2认同)
  • 确实是的.我已经删除了UB,并保留了"不要这样做".谢谢. (2认同)