按值传递:创建参数的新副本;原来的保持不变。
通过左值引用传递:修改原来的对象;需要稳定的标识(左值)。
通过左值传递对Const的引用:观察原始对象而不修改它;接受左值和右值。
通过右值传递参考:绑定到右值(临时对象或移出对象);可以执行移动操作。
使用左值引用进行修改:
当函数需要修改原始对象时,通过左值引用(& ).
使用对 Const 的左值引用观察:
对于仅观察对象状态的函数,通过左值引用传递给 const (const &)。
考虑对非复制密集型类型按值传递:
如果副本很便宜(例如整数、字符),请考虑通过
左值和右值的重载(如果需要):
如果涉及昂贵的移动并且您希望避免左值的移动,请创建单独的重载。
利用完美转发进行通用处理:
使用函数模板和 std::forward 自动进行根据参数类型(右值/左值)确定是否复制或移动。
CreditCard 类: 考虑使用两个版本重载构造函数:
CreditCard(CreditCard const& other); // lvalue reference to copy CreditCard(CreditCard&& other); // rvalue reference to move
信用卡账户类别成员:
根据所需的行为使用以下构造函数之一:
Account(std::string number, float amount, CreditCard const& creditCard); // Copy Account(std::string number, float amount, CreditCard&& creditCard); // Move
具有帐户向量的帐户类成员:
通过引用传递或const 引用,取决于是否需要修改。
Client(std::string firstName, std::string lastName, std::vector<Account> accounts); // Reference for modification Client(std::string firstName, std::string lastName, std::vector<const Account> accounts); // Reference to const for observation
以上是如何在 C 语言中选择正确的参数传递机制?的详细内容。更多信息请关注PHP中文网其他相关文章!