我是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);
显然,在这种情况下,信用卡将被复制两次。如果我重写该构造函数为
Account(std::string number, float amount, CreditCard& creditCard)
: number(number)
, amount(amount)
, creditCard(creditCard)
会有一份副本。如果我把它重写为
Account(std::string number, float amount, CreditCard&& creditCard)
: number(number)
, amount(amount)
, creditCard(std::forward<CreditCard>(creditCard))
将有2个动作,没有副本。
我想有时您可能想要复制一些参数,有时您不希望在创建该对象时进行复制。
我来自C#,用于引用,对我来说有点奇怪,我认为每个参数应该有2个重载,但我知道我错了。
有没有关于如何在C ++中发送参数的最佳实践,因为我真的发现它,比方说,并非琐碎。你会如何处理我上面提到的例子?
POPMUISE
相关分类