2012-06-26 58 views
1

我理解引用变量的概念。这是另一个变量的别名。用例引用常量变量

int varA = 100; 
int &varB = varA; 

这里varB是指varA,都指向同一个存储位置。一个变量的变化反映在另一个变量中。

问:

  1. 一)int &c = 100;
    什么是上述声明的含义,以及它是如何从下面的有什么不同?
    二)int c = 100;

  2. 是否有一个地方,我们需要使用任何方案1(A),而不是图1(b)?

+6

如果你尝试编译图1(a) ,那么你会明白为什么1(b)更好。 –

+0

有没有人有方便的Visual C + +? 1(a)在那里编译?如果我记得,它允许将非const引用绑定到临时对象。 –

+0

@BenjaminLindley它没有。 –

回答

3

所有是正确的,但这样的:

int &c = 100; //error 

它都将在C++ 03和C++ 11给出编译错误。这是因为它试图将非const引用绑定到不允许的临时对象(创建于100之外)。

在C++ 11,你可以这样做,但是:

int && c = 100; //ok 

它被称为右值引用。

你可以结合const的(无论是在C++ 03,和C++ 11)引用到临时虽然:

int const & c = 100; 

-

int c = 100; 

它简单地定义了一个对象称为c并用100初始化它。这里没有参考。

+0

感谢所有的答复。你提到我们可以绑定'const引用到临时',在这种情况下,int const和c = 100之间有什么区别;和const int c = 100? – Whoami

+0

一个是参考,其他不是。了解'&'的意义。实际上,这里没有太大区别(至少现在我想不出有什么区别)。 – Nawaz

+0

Nawaz,可能我提出了不同的问题,哪种情况下可以使用const&c = 100?我理解的是:fun(const int&a),fun(123),然后临时对象'123'不会被复制到堆栈中,而是从存储'123'的数据段引用它。我的理解是否正确? – Whoami

2

1)int& c = 100;是非法的,而第二个不是。

我明白了参考变量的概念。

如果你真正理解引用,你希望你做c = 101不断100后突然转向101

2)没有回答的问题,因为1)是非法的。

+0

我的错误。我还没有完全理解。 :)。 – Whoami

+0

@Whoami认为引用是一个别名。一个昵称。当你说'int&c = x'时,每当你写'c'时,就像你在写'x'。这对于一个常量的非常量引用无意义 - “int&c = 100”,因为你可以编写“c = 101”,这将*转化为“100 = 101”,这显然不会合理。 –

+0

true :)。感谢您的回复:) – Whoami

3
int &c = 100 

是无效的代码,你不能绑定一个非const引用临时。

要使其有效,你需要一个const参考:

const int &c = 100; 

虽然,

int c = 100 

是合法的代码。它创建一个名称为c的变量int并使用100对其进行初始化。

2
int& i = 100; 

违法。

是合法的说:

int const& i = 100; 
const int& i = 100; // same as above 

在这方面不是特别有用,但它需要为函数的目的工作电话:

void foo(int const& i) { ... } 
... 
    foo(100);