我理解引用变量的概念。这是另一个变量的别名。用例引用常量变量
int varA = 100;
int &varB = varA;
这里varB
是指varA
,都指向同一个存储位置。一个变量的变化反映在另一个变量中。
问:
一)
int &c = 100;
什么是上述声明的含义,以及它是如何从下面的有什么不同?
二)int c = 100;
是否有一个地方,我们需要使用任何方案1(A),而不是图1(b)?
我理解引用变量的概念。这是另一个变量的别名。用例引用常量变量
int varA = 100;
int &varB = varA;
这里varB
是指varA
,都指向同一个存储位置。一个变量的变化反映在另一个变量中。
问:
一)int &c = 100;
什么是上述声明的含义,以及它是如何从下面的有什么不同?
二)int c = 100;
是否有一个地方,我们需要使用任何方案1(A),而不是图1(b)?
所有是正确的,但这样的:
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
初始化它。这里没有参考。
int &c = 100
是无效的代码,你不能绑定一个非const引用临时。
要使其有效,你需要一个const
参考:
const int &c = 100;
虽然,
int c = 100
是合法的代码。它创建一个名称为c
的变量int
并使用100
对其进行初始化。
int& i = 100;
违法。
是合法的说:
int const& i = 100;
const int& i = 100; // same as above
在这方面不是特别有用,但它需要为函数的目的工作电话:
void foo(int const& i) { ... }
...
foo(100);
如果你尝试编译图1(a) ,那么你会明白为什么1(b)更好。 –
有没有人有方便的Visual C + +? 1(a)在那里编译?如果我记得,它允许将非const引用绑定到临时对象。 –
@BenjaminLindley它没有。 –