当前位置: 首页 > 知识库问答 >
问题:

传递一个常数是自动通过引用传递的?

贝洲
2023-03-14

如果我将一个变量传递给一个函数,但将该变量标记为常量,它会自动通过引用传递吗?

void foo(const int a)

测试后:没有,因为它打印不同的内存位置。

void foo(const int a)
{
    cout << &a << endl;
}

int main()
{
   int a = 5;
   foo(a);
   cout << &a << endl;
   return 0;
}

没有权利?因为我只能传递一个指向内存位置的指针,而不是真正通过引用。如下所示:在C中通过引用传递

void foo(final int a)
void foo(const int a)
 void f(const int &a)

这几乎就是我所做的Java和C#编译器在幕后所做的事情。

共有1个答案

吕修伟
2023-03-14

在Java中,所有变量都是按值传递的。

基元实际上是复制的,对象变量无论如何都是引用,这意味着对象变量的值实际上是引用->您正在传递引用的值。

尽管如此,您总是按值传递,就像在C++中一样,如果不显式地使用引用,您将按值传递。

void function(int& intByReference) {
    cout<<&intByReference<<endl; //prints x
}

int main() {
    int n = 0;
    cout<<&n<<endl; //prints x
    function(n);
}
class MyClass {

    public:
        MyClass(MyClass& objectToCopy) {
            //copy your object here
            //this will be called when you pass an instance of MyClass to a function
        }
};
 类似资料:
  • 问题内容: 我真的是Swift的新手,我刚刚读到类是通过引用传递的,并且复制了数组/字符串等。 通过引用进行传递是否与在Objective-C或Java中通过“ a”引用进行传递的方式相同,还是通过引用进行正确传递? 问题答案: Swift中的事物类型 规则是: 类实例是 引用类型 (即, 您 对类实例的引用实际上是一个 指针 ) 函数是参考类型 其他一切都是 价值类型 ; “其他所有内容”仅表示

  • 问题内容: Javascript是通过引用传递还是通过值传递?这是 Javascript中的 一个示例 :The Good Parts 。我对矩形函数的参数非常困惑。它实际上是,并在函数内部重新定义。没有原始参考。如果我从功能参数中删除它,则内部区域功能将无法访问它。 是关闭吗?但是没有函数返回。 问题答案: 基元按值传递,对象按“引用副本”传递。 具体来说,当您传递对象(或数组)时,您(无形中)

  • 问题内容: Go中的地图是否通过值或引用传递? 始终可以将函数定义为以下形式,但这是一个过大的杀伤力吗? 相同的返回值问题。我应该返回指向地图的指针,还是将地图作为值返回? 这样做的目的当然是避免不必要的数据复制。 问题答案: 在此线程中,您将找到答案: Golang:使用地图参考来访问地图 您不需要在地图上使用指针。 映射类型是引用类型,例如指针或切片[1] 如果需要更改会话,可以使用一个指针:

  • 问题内容: 这两个代码有什么区别: 代码A: 哪里 VS. 代码B: 这两个代码之间有什么区别吗? 问题答案: Java始终按值传递参数,而不按引用传递参数。 让我通过一个例子解释一下: 我将逐步解释这一点: 声明一个名为ftype 的引用,Foo并将其分配给Foo具有属性的type的新对象”f”。 从方法方面,声明Foo具有名称的类型引用,a并将其初始分配给null。 调用方法时changeRe

  • 问题内容: 我想将我的Swift传递 给引用(这样,当我向添加聊天时,仍指向)。即,当更改长度时,我不希望Swift将两个数组分开。 问题答案: Swift中的结构按值传递,但是您可以使用修饰符来修改数组(请参见下面的答案)。类通过引用传递。和在Swift中实现为结构。

  • 问题内容: 我遇到了这样一个事实,数组在多个位置通过引用传递,但是然后当我执行以下代码时,为什么和的行为之间有区别 我正在使用python 2.7和numpy版本1.6.1 问题答案: 在Python中,所有变量名都是对values的引用。 当Python评估分配时,右侧的评估先于左侧。创建一个新数组;它不会就地修改。 使局部变量引用此新数组。它不会修改传递给的原始引用的值。变量名称仅绑定到新数组