在我看来:这句话换种说法比较合适,引用一经初始化,他的指向就修改不了了。 为什么这么说呢,请看代码

    std::string s1 = "ab";
	std::string s2 = "bc";
	std::string &s3 = s2;//此处s3引用s2
	s3 = s1; //尝试修改指向
	cout << s1 << endl;//结果是:ab
	cout << s2 << endl;//结果是:ab
	cout << s3 << endl;//结果是:ab
    //这里你发现这不是修改指向了吗?
    //是不是给你的感觉是s3修改指向,指向了s1
    //其实并不是。
    
    //请再看下面输出的结果
	cout << &s1 << endl; //0x0038FAEC
	cout << &s2 << endl; //0x0038FAc8
	cout << &s3 << endl; //0x0038FAc8
    //这里你是不是发现,s2和s3的地址是一样的
    //这是为什么呢?
   
   //再看这里:
	s3 = "abcd";//修改引用对象的值
	cout << s1 << endl;//ab
	cout << s2 << endl;//abcd
	cout << s3 << endl;//abcd
    
    //看到这里是不是发现了什么
    

其实上面的s3 = s1并有修改引用的指向,只是单单的把s1的值赋值给了s3 导致s2和s3都变为ab,因为他们使用一块内存(输出地址相等),他们的值并没有发生改变。

而后面我将s3的值改变,更是证明了这一点,如果当时s3修改了指向的话,那么 s1的值应该修改为abcd,但是结果并不是。

所有在我看来:引用一经初始化,他的指向就修改不了了