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

问题描述 投票:0回答:3

我正在学习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;
    }
    
c++ reference const
3个回答
0
投票

使用(常量类型和变量),您将确保不应该修改对象,而只能使用常量方法。使用指针不能保证传递一个对象(或对象数组)。您能否进一步解释第三个问题?


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

第一个函数会影响传递的值,但第二个函数不会影响此函数的操作,将其应用于传递的值的副本。


0
投票

如果计划在函数完成后继续使用要传递给函数的值,通常应该使用引用。正如您所强调的那样,有时传递参考的成本更高。如果您的数据很小(通常您不会打扰将整数作为参数传递),或者如果您有机会move变量的内容(尽管这可能是一个更复杂的主题),则可能发生这种情况。

使用引用使您避免复制数据,同时仍保证该参数有效,因为与指针不同,没有空引用。引用使您有机会允许函数更改变量的内容,或者使用const引用,可以防止函数修改传入的变量。通常,在不需要时,您应该更喜欢使用引用而不是指针仅适用于指针的功能,不需要突变时,更喜欢使用const引用而不是引用。

© www.soinside.com 2019 - 2024. All rights reserved.