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

6

可能是重复的问题:
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();是什么意思?

3
返回一个指向整数的引用的函数。 - R. Martinho Fernandes
这是一个函数声明。 - chris
只需在某个地方定义它即可。 - Yola
4个回答

5
int& foo(); 

声明一个返回 int 引用的函数。你可以将其视为类似于

int* foo();

除了返回值不能为null之外。

语法有些不同,因为int* foo();将被用作*(foo()) = 42;int& foo();将被用作foo() = 42

您可以在常见问题解答中了解更多关于引用的内容。


5

假设foo的主体是这样的:

int & foo()
{
   static int i = 0;
   return i;
}
foo() = 30;

这将把静态整数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)

1

int& foo(); 意味着函数 foo() 返回一个引用类型。也就是说,它的返回值可以被修改:

foo() = 42;

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接