int vs const int&,当我使用它时

时间:2019-10-08 20:50:36

标签: c++ reference const

我正在学习c ++,并试图完全理解如果我接受类似(const type& var)(type var)这样的论点之间的区别。我的理解是,通过传递“引用” (const type& var)会降低成本,因为不需要有意义的“复制构造器”或“销毁构造器”。但是:

  1. 何时使用此功能,因为在某些情况下(type var)的价格更低。 我应该使用它的原因,因为在某些情况下(type var)的花费更低。
  2. 为什么我们不使用指针呢?
  3. (初学者问题)如何将“值”传递给“引用”?

    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;
    }
    

3 个答案:

答案 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引用。