一开始看到这题目,我就觉得这个问题是不是我读反了?我仔细的读了第二遍才确定没读错。
C++的引用本质上就是指针的语法糖:引用能做到的,指针都能无损的做到——反之则不行。
对比引用和指针,其中对编程影响最大的功能缺失,莫过于引用不能修改指向。
随手列举一些问题:
swap 机制被迫用到开销极大的值拷贝;
数据结构只能在定义时确定,无法动态调整(除了数组外,几乎所有数据结构的增删都依赖指针的动态调整);
delete 后置为 NULL 的低成本低开销规避野指针操作无法实现(这意味着你没有任何办法去标识”野引用“——除非你不用 delete);
延迟加载/singleton等机制会相当难实现。
总之,C++的引用只是一个方便编译器进行激进优化的语法糖,类似于 const/restrict 之类的关键字一样,有它更好,没它照样能跑。所以,它本身就没考虑到它会去”替代“些什么。因此,对比指针,单从功能的完备性来说,就不是能放在一起比的。