通过引用传递(别名问题)

时间:2013-09-30 19:42:46

标签: parameter-passing alias

我目前正在学习编程语言的原理。任何人都可以告诉我,通过引用传递会导致别名问题是什么意思吗?

2 个答案:

答案 0 :(得分:0)

当多个符号指向同一个内存块时发生混叠。应该避免这种情况以减少混淆。下面是别名的一个简单示例:

#include <iostream>

int main()
{
    int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int& alias = array[3];  // alias points to 4th element in the array.

    alias = 100;    // 4th element in the array set to 100!
                    // this is best avoided because it is not
                    // immediately obvious that assigning a value
                    // to alias will affect the array.

    for(std::size_t i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
        std::cout << array[i] << std::endl;

    return 0;
}

输出:

Success  time: 0 memory: 3340 signal:0
0
1
2
100
4
5
6
7
8
9

在这个例子中,显而易见的是alias指向数组中的第4个元素,但是在大型生产环境中,这会造成严重破坏,并且难以解决错误。

答案 1 :(得分:-2)

通过引用传递,方法可以更改原始数据。