可能重复:
What are the differences between pointer variable and reference variable in C++?
我正在阅读一篇关于右值的文章,以便了解新C ++标准中的通用引用,并发现以下作为左值的示例
// lvalues:
//
int i = 42;
i = 43; // ok, i is an lvalue
int* p = &i; // ok, i is an lvalue
int& foo();
foo() = 42; // ok, foo() is an lvalue
int* p1 = &foo(); // ok, foo() is an lvalue
int& foo();
在这里意味着什么?
答案 0 :(得分:4)
int& foo();
声明一个返回对int
的引用的函数。您可以将其视为与
int* foo();
除了返回值不能为null。
但语法略有不同,因为int* foo();
将用作*(foo()) = 42;
,int& foo();
将用作foo() = 42
。
您可以在the FAQ.
中详细了解参考资料答案 1 :(得分:4)
说foo的身体是这样的:
int & foo()
{
static int i = 0;
return i;
}
foo() = 30;
这会将静态int,i设置为30;
更实际的例子是返回对自身的引用的类
class foo
{
public:
foo() {}
foo& addString() {
/* AddString */
return *this;
}
foo& subtractSomething() {
/* Subtract Something */
return *this;
}
}
然后使用它:
foo f;
f.addString().subtractSomething();
类操作符执行此操作 - 因此您可以执行此操作:
foo a, b c;
foo d = a+b+c;
+运算符定义为:
foo & operator+(const foo& f)
答案 2 :(得分:1)
int& foo();
表示函数foo()
返回引用类型。也就是说,可以修改其返回值:
foo() = 42;
表示“修改foo
”返回的引用值。
答案 3 :(得分:0)
您正在定义一个函数原型,并将引用作为返回值。该函数返回对整数的引用。因此,它的返回值可以设置为另一个值。