5

可能重复:
C++ 中的指针变量和引用变量有什么区别?

我正在阅读一篇关于 rvalues 的文章,以了解新 C++ 标准中的通用引用,并找到以下作为 lvalue 的示例

// 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();意思?

4

4 回答 4

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)
于 2012-11-09T18:51:23.047 回答
4
int& foo(); 

声明一个返回对 . 的引用的函数int。你可以看到它类似于

int* foo();

除了返回值不能为空。

但是,语法有点不同,因为int* foo();将用作 as*(foo()) = 42;int& foo();as foo() = 42

您可以在常见问题解答中阅读有关参考的更多信息

于 2012-11-09T17:19:26.893 回答
1

int& foo();表示该函数foo()返回一个引用类型。也就是可以修改它的返回值:

foo() = 42;

意思是“修改”返回的引用值foo

于 2012-11-09T17:20:35.253 回答
0

您正在定义一个以引用作为返回值的函数原型。该函数返回对整数的引用。因此,它的返回值可以设置为另一个值。

于 2012-11-09T17:19:25.423 回答