foo()= 42; < - 这怎么可能?

时间:2012-11-09 17:17:07

标签: c++

  

可能重复:
  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();在这里意味着什么?

4 个答案:

答案 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)

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