我正在学习c ++,并试图完全理解如果我接受类似(const type& var)
和(type var)
这样的论点之间的区别。我的理解是,通过传递“引用” (const type& var)
会降低成本,因为不需要有意义的“复制构造器”或“销毁构造器”。但是:
(type var)
的价格更低。
我应该使用它的原因,因为在某些情况下(type var)
的花费更低。(初学者问题)如何将“值”传递给“引用”?
class Human{
private:
friend void DisplayAge (const Human& Person);
string name;
int age;
public:
Human (string personName, int personAge):
name(personName), age(personAge) {}
};
void DisplayAge(const Human& Person)
{
cout << Person.age << endl;
}
int main() {
Human FirstMan("Adam", 25);
cout << "Accessing private member age via friend function: ";
DisplayAge(FirstMan);
return 0;
}
答案 0 :(得分:0)
使用(常量类型和变量),您将确保不应该修改对象,而只将常量方法保留下来。 使用指针不能保证传递一个对象(或对象数组)。 你能解释更多第三个问题吗?
答案 1 :(得分:0)
问题3答案:
如果我对您的理解正确,那么传递值(不是引用或指向引用该函数的指针)将使该函数直接访问此变量,也可以直接访问传递给该函数的实际值的字段。
示例:
void foo(int& ref)
{
ref = 5;
}
void bar(int non_ref)
{
non_ref = 0;
}
int main()
{
int integer_value = 1;
foo(integer_value);
bar(integer_value);
return 0;
}
第一个函数将影响传递的值,但第二个函数不会影响此函数的操作,将其应用于传递的值的副本。
答案 2 :(得分:0)
如果计划在函数完成后继续使用要传递给函数的值,通常应该使用引用。正如您所强调的那样,有时传递参考的成本更高。如果您的数据很小(通常您不会打扰将整数作为参数传递),或者您有机会move
变量的内容(尽管这可能是一个更复杂的话题),则会发生这种情况。
使用引用使您避免复制数据,同时仍保证该参数有效,因为与指针不同,没有空引用。引用使您有机会允许函数更改变量的内容,或者使用const引用,可以防止函数修改传入的变量。通常,在不需要时,您应该更喜欢使用引用而不是指针仅适用于指针的功能,不需要突变时更喜欢使用const引用。