1> 不仅效率高,而且避免了“对象切割”的问题:
class Window { public: ... std::string name() const; virtual void display() const; }; class WindowWithScrollBars: public Window { public: ... virtual void display() const; }; void printNameAndDisplay(Window w) // 此处用传值,会切割派生类的对象 { std::cout << w.name(); w.display(); } WindowWithScrollBars wwsb; printNameAndDisplay(wwsb); // wwsb被当作Window传进去了
2> 类小不见得拷贝的代价小。比如一些STL容器,里面只有一个指针,但拷贝却很复杂。
3> 即使一个类里只有一个double成员,一些编译器也会拒绝使用寄存器优化其存取。
4> 用户自定义的类型,有可能以后会扩充。所以引用比较好。
本文探讨了C++中对象传递的方式,分析了传值可能导致的问题,如对象切割,并对比了传引用的优势。此外,还讨论了不同类型拷贝成本的误区及编译器优化限制。
1585

被折叠的 条评论
为什么被折叠?



