通过引用传递的参考值

时间:2014-04-01 09:36:20

标签: c++ pass-by-reference

我开始尝试理解C ++并与#34; undefined","未指定"混淆。

参考文献被广泛记录,但我没有找到我的特定"的答案。题。

通过引用传递的值的引用怎么样?

我已使用以下代码对此进行了测试:

#include <iostream>

int func(int& a)
{
    int b=a;
    ++b;
    std::cout << "[func] b: " << b << std::endl;
    return b;
}

int func2(int& a)
{
    int& b=a;
    ++b;
    std::cout << "[func2] b: " << b << std::endl;
    return b;
}

int main()
{
    int a=1;
    std::cout << "a: " << a << std::endl;
    func(a);
    std::cout << "a after func: " << a << std::endl;
    func2(a);
    std::cout << "a after func2: " << a << std::endl;
    return 0;
}

得到了输出:

a: 1
[func] b: 2
a after func: 1
[func2] b: 2
a after func2: 2

它似乎做了我的期望,但这是标准规定的行为吗?

3 个答案:

答案 0 :(得分:1)

从最新的公共标准草案http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf

开始
  

8.5.3参考文献[dcl.init.ref]   1一个被宣称为T&amp; S的变量。或T&amp;&amp;,即“对类型T的引用”(8.3.2),应由类型为T的对象或函数或可由对象初始化。   转换成T. [例如:

int g(int);  
void f() {   
    int i;   
    int& r = i; // r refers to i  
    r = 1; // the value of i becomes 1 
    int* p = &r; //p points to i 
    int& rr = r; // rr refers to what r refers to, that is, to i
[...]

因此,虽然句子可能会留下一个不确定的(这里的相关部分可能是一个引用“可以转换为T”),但这个例子(这里的最后一行是相关的)是明确的。

答案 1 :(得分:0)

是的,这是标准行为。

当您通过引用传递某些内容时 - 实际上您只是为该变量分配了一个名称。

喜欢 -

当您使用main中的func(a)调用func2(int&amp; a)时,您将为变量指定一个新名称&#39; a&#39;主要定义。主要变量&#39; a&#39;被称为&#39; a&#39;在func2中。基本上fun2 :: a和main :: a引用相同的变量。

另外,当你这样做的时候 int&amp; B = A;在func2中,您为func2 :: a - &gt; func2 :: b创建了一个新名称。因此,变量保持不变,只添加新名称。

答案 2 :(得分:0)