5

重複の可能性:
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

4 に答える 4

4
int& foo(); 

への参照を返す関数を宣言しますint。あなたはそれを次のように見ることができます

int* foo();

ただし、戻り値をnullにすることはできません。

ただし、ととしてint* foo();使用されるため、構文は少し異なります。*(foo()) = 42;int& foo();foo() = 42

参照について詳しくは、FAQをご覧ください。

于 2012-11-09T17:19:26.893 に答える
4

fooの本体がこれだったとしましょう:

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

これにより、static 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 に答える
1

int& foo();関数が参照型をfoo()返すことを意味します。つまり、その戻り値は次のように変更できます。

foo() = 42;

「によって返される参照値を変更する」を意味しますfoo

于 2012-11-09T17:20:35.253 に答える
0

戻り値として参照を使用して関数プロトタイプを定義しています。この関数は整数への参照を返します。そのため、その戻り値は別の値に設定できます。

于 2012-11-09T17:19:25.423 に答える