C++函数采用值,它们应该在哪里引用

Jef*_*rth 1 c++ pointers reference pass-by-reference pass-by-value

我只是在学习c ++,而且来自c,我在书中看到的一些函数调用让我很困惑:

char a;
cin.get(a);
Run Code Online (Sandbox Code Playgroud)

在C中,这可能不起作用,如果你这样做,就没有办法获得输出,因为你是通过值传递而不是通过引用,为什么这在c ++中工作?引用和去除是隐式的(编译器知道cin.get需要一个指针,所以它被引用)?

Leo*_*Hat 11

C++

这可以在C++中工作,因为函数签名get()可能是这样的:

void get(char& a); // pass-by-reference
Run Code Online (Sandbox Code Playgroud)

&之后的符号char表示的编译器,当你在一传比char的值,它应该在通过引用char,而不是做一个副本.

这实质上意味着内部所做的任何更改都get()将反映在a方法之外的值中.

如果函数签名get()是这样的:

void get(char a); // pass-by-value
Run Code Online (Sandbox Code Playgroud)

然后a将通过传递,这意味着a在作为参数传递给方法之前进行复制.任何更改a都只是本地方法,并在方法返回时丢失.

C

这在C中不起作用的原因是因为C只有pass-by-value.在C中模拟传递引用行为的唯一方法是按值传递其指针,然后在修改方法中的值时取消引用指针值(从而访问相同的内存位置):

void get(char* a)
{
    *a = 'g';
}

int main(int argc, char* argv[])
{
    char a = 'f';
    get(&a);
    printf("%c\n", a);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行此程序将输出:

g
Run Code Online (Sandbox Code Playgroud)