相关疑难解决方法(0)

如何正确传递参数?

我是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);
Run Code Online (Sandbox Code Playgroud)

显然,在这种情况下,信用卡将被复制两次.如果我重写该构造函数为

Account(std::string number, float amount, CreditCard& creditCard) 
    : number(number)
    , amount(amount)
    , creditCard(creditCard)
Run Code Online (Sandbox Code Playgroud)

会有一份副本.如果我把它重写为

Account(std::string number, float amount, CreditCard&& creditCard) 
    : number(number)
    , amount(amount)
    , creditCard(std::forward<CreditCard>(creditCard))
Run Code Online (Sandbox Code Playgroud)

将有2个动作,没有副本.

我想有时您可能想要复制一些参数,有时您不希望在创建该对象时进行复制.
我来自C#,用于引用,对我来说有点奇怪,我认为每个参数应该有2个重载,但我知道我错了.
有没有关于如何在C++中发送参数的最佳实践,因为我真的发现它,比方说,并非琐碎.你会如何处理我上面提到的例子?

c++ c++11

105
推荐指数
3
解决办法
8461
查看次数

标签 统计

c++ ×1

c++11 ×1