我理解参考变量的概念。它是另一个变量的别名。
int varA = 100;
int &varB = varA;
这varB
是一个引用varA
,都指向相同的内存位置。一个变量的变化反映在另一个变量上。
问题:
a)
int &c = 100;
上述陈述的含义是什么,它与以下陈述有何不同?
b)int c = 100;
有没有我们需要使用 1(a) 而不是 1(b) 的场景?
我理解参考变量的概念。它是另一个变量的别名。
int varA = 100;
int &varB = varA;
这varB
是一个引用varA
,都指向相同的内存位置。一个变量的变化反映在另一个变量上。
问题:
a)int &c = 100;
上述陈述的含义是什么,它与以下陈述有何不同?
b)int c = 100;
有没有我们需要使用 1(a) 而不是 1(b) 的场景?
一切都是正确的,除了这个:
int &c = 100; //error
它会在 C++03 和 C++11 中给出编译错误。这是因为它试图将非常量引用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 int &c = 100;
尽管,
int c = 100
是一个有效的代码。它创建一个以c
该类型命名的变量int
并用100
.
1)int& c = 100;
是非法的,而第二个不是。
我理解了参考变量的概念。
如果您真的了解引用,您是否期望在您执行c = 101
常量之后100
突然变成101
?
2) 回答没有意义,因为 1) 是非法的。
int& i = 100;
是非法的。
合法地说:
int const& i = 100;
const int& i = 100; // same as above
Not particularly useful in this context, but it needs to work for the purposes of function calls:
void foo(int const& i) { ... }
...
foo(100);