关于C++中non-const iterator绑定到const_iterator&的标准合规性及编译器行为差异问询
C++中non-const iterator绑定到const_iterator&的标准合规性及编译器行为差异问询
各位好,我碰到了一个C++代码在不同编译器下行为不一致的问题,想请教下符合标准的正确处理方式应该是怎样的。
先贴出我的测试代码:
#include <string> #include <iostream> void f(std::string::const_iterator& p) { ++p; } int main () { std::string s{"ABCD"}; std::string::const_iterator ps = s.begin(); f(ps); std::cout <<"ps= " << *ps <<std::endl; std::string::iterator qs = s.begin(); f(qs); //<--- clang 和 gcc 在此行报告错误 std::cout <<"qs= " << *qs <<std::endl; return 0; }
问题详情:
这段代码用clang和gcc编译时,上面标注的那一行会报错,但用MSVC编译却能正常通过并运行。
我想知道:按照C++语言标准,这里的正确行为应该是什么样的?
另外说下我个人的看法:我觉得MSVC的处理是正确的。注意在ps = s.begin();这一行,所有编译器都能正确地将non-const iterator转换为const iterator,那同样的规则应该也适用于引用绑定的场景吧?
还有一个后续问题:如果gc...(此处内容未补充完整)
备注:内容来源于stack exchange,提问作者Mircea
相关产品推荐
相关产品推荐

