在c++中,是通过值传递更好,还是通过引用到const传递更好?

我不知道哪种做法更好。我意识到,通过引用传递到const应该在程序中提供更好的性能,因为您没有对变量进行复制。


当前回答

为小类型传递值。

但是,在c++ 11中,如果您要使用数据,则通过值传递,因为您可以利用move语义。例如:

class Person {
 public:
  Person(std::string name) : name_(std::move(name)) {}
 private:
  std::string name_;
};

现在调用代码会做:

Person p(std::string("Albert"));

并且只会创建一个对象,并直接移动到类Person中的成员name_中。如果传递const引用,则必须创建一个副本以将其放入name_中。

其他回答

简单的区别:-在函数中,我们有输入和输出参数,所以如果你传递的输入和输出参数相同,那么使用引用调用,否则,如果输入和输出参数不同,那么最好使用值调用。

示例无效金额(int账户,int存款,int总数)

输入参数:账户、存款 输出参数:total

输入和输出是不同的使用值调用

无效金额(int total, int deposit)

投入总保证金 输出总

为小类型传递值。

但是,在c++ 11中,如果您要使用数据,则通过值传递,因为您可以利用move语义。例如:

class Person {
 public:
  Person(std::string name) : name_(std::move(name)) {}
 private:
  std::string name_;
};

现在调用代码会做:

Person p(std::string("Albert"));

并且只会创建一个对象,并直接移动到类Person中的成员name_中。如果传递const引用,则必须创建一个副本以将其放入name_中。

听起来你得到答案了。传递值是昂贵的,但是如果需要的话,可以给您提供一个副本。

这取决于类型。这样就增加了必须进行引用和取消引用的小开销。对于大小等于或小于使用默认复制ctor的指针的类型,按值传递可能会更快。

正如已经指出的,这取决于类型。对于内置数据类型,最好按值传递。即使是一些非常小的结构,比如一对int型,通过传递值也可以执行得更好。

这里有一个例子,假设你有一个整数值,你想把它传递给另一个例程。如果该值已优化为存储在寄存器中,那么如果要将其传递为引用,则必须首先将其存储在内存中,然后将指向该内存的指针放置在堆栈中以执行调用。如果是按值传递,所需要的只是将寄存器推入堆栈。(与给定不同的调用系统和cpu相比,细节要复杂一些)。

如果你在做模板编程,你通常被迫总是通过const ref传递,因为你不知道传递的类型。通过值传递错误值的惩罚要比通过const ref传递内置类型的惩罚严重得多。