我是一个 C + + 初学者,但不是一个编程初学者。 我正在尝试学习 C + + (c + + 11) ,但对我来说最重要的事情还不太清楚: 传递参数。
我考虑了这些简单的例子:
具有所有成员基元类型的类:
CreditCard(std::string number, int expMonth, int expYear,int pin):number(number), expMonth(expMonth), expYear(expYear), pin(pin)
将基元类型 + 1复杂类型作为成员的类:
Account(std::string number, float amount, CreditCard creditCard) : number(number), amount(amount), creditCard(creditCard)
一个类,其成员包括一些复杂类型的基元类型 + 1集合:
Client(std::string firstName, std::string lastName, std::vector<Account> accounts):firstName(firstName), lastName(lastName), accounts(accounts)
当我创建一个帐户时,我这样做:
CreditCard cc("12345",2,2015,1001);
Account acc("asdasd",345, cc);
Obviously the credit card will be copied twice in this scenario. 如果我将构造函数重写为
Account(std::string number, float amount, CreditCard& creditCard)
: number(number)
, amount(amount)
, creditCard(creditCard)
there will be one copy. 如果我把它改写成
Account(std::string number, float amount, CreditCard&& creditCard)
: number(number)
, amount(amount)
, creditCard(std::forward<CreditCard>(creditCard))
将有两个动作,没有复制。
我认为有时候你可能想要复制一些参数,有时候你不想复制当你创建那个对象。
I come from C# and, being used to references, it's a bit strange to me and I think there should be 2 overloads for each parameter but I know I am wrong.
有没有在 C + + 中发送参数的最佳实践,因为我真的发现它,比方说,非常重要。你如何处理我上面提到的例子?