在C++中,函数的参数(包括方法的成员)可以通过以下方式传递:
示例:
void foo(int value); // 按值传递 void foo(int* ptr); // 按指针传递 void foo(const int& ref); // 按引用传递(适合大型对象!)
在按引用传递时可能实现优化(复制消除),对于大型对象建议使用const &。对于指针,始终检查nullptr。
const MyClass& obj与MyClass obj在函数参数中有什么区别?
回答:
const MyClass&不复制对象,而是提供只读访问(适合大型对象)。MyClass obj总是做副本,这在对象较大或缺少正确复制(例如,未实现深复制)时成本高。
void process(const std::string& s); // 不复制 void process(std::string s); // 复制
故事 在公司数学结构库中,程序员决定通过按值传递大的容器来加速工作。这在每次函数调用时造成了可观的开销——性能降低了一半。
故事 在用户管理模块中使用指针而未检查
nullptr。在访问无效指针时有时会发生随机崩溃,调试花费了几个月。
故事 在图像处理项目中,部分函数按值接受对象,而部分函数按引用接受。对于某个类未实现深复制,导致内存泄漏和在按值传递后资源的隐性共享。