C++中能否重置引用指向其他值?含代码有效性问询
你的代码是合法且行为定义明确的C++代码
首先得澄清一个关键误区:你并没有“重置引用”——你只是在通过引用修改它绑定的原始对象,这完全符合C++的规则。
咱们拆解一下代码里的操作:
- 当你创建
std::pair<std::string &, std::string &> p { x, y };时,p.first被初始化为绑定到x的引用,p.second绑定到y。一旦初始化完成,这两个引用的绑定关系就固定了,永远不能再指向其他对象。 - 而
p.first = "1";这个操作,本质是把字符串字面量"1"赋值给p.first所绑定的对象(也就是x),并不是改变p.first这个引用本身的绑定。同理p.second = "2";是修改y的值,这和直接写x = "1"; y = "2";的效果完全一致。
如果后续你尝试写类似p = {i, j};这样的代码,也不会让p.first重新绑定到i——这个操作实际上是把i的值赋给x,j的值赋给y,因为pair的赋值运算符对于引用成员的处理是:将右侧引用指向的对象的值,赋值给左侧引用指向的对象,而不是修改引用的绑定。
总结一下:引用的核心限制是不能改变它绑定的对象,但通过引用修改绑定对象的值是完全合法且常见的操作,你的代码正好属于这种情况,所以在clang和g上能正常运行是符合标准的。
内容的提问来源于stack exchange,提问作者user534498
相关产品推荐
相关产品推荐

