类和变量之间的"ampersand operator"是什么意思?



我在羽毛中看到了以下代码,很困惑:

void ActionAtomistic::makeWhole() {
for(unsigned j=0; j<positions.size()-1; ++j) {
    const Vector & first (positions[j]);
    Vector & second (positions[j+1]);
    second=first+pbcDistance(first,second);
  }
}

任何人都可以告诉我什么"&amp;"在这里使用吗?我在谷歌搜索了"类和变量之间的C and和",但没有找到答案。

更新:我知道什么是参考,但认为向量和"&amp;"之间不应该有任何空间。谢谢你们澄清。

这意味着 first参考(在这种情况下, const参考(对类型Vector的对象,而不是类型Vector的对象。<<<<<<<<<<<<<</p>

在此处阅读有关引用的更多信息。

被称为参考。我通常会像 Type& name一样写引用,以明确参考是类型的一部分。

引用就像指示器更易于使用,但会受到一些限制。这是您何时可以使用参考的示例:

void add1ToThisNumber(int& num) {
    num += 1;
}
// elsewhere...
int myNumber = 3;
add1ToThisNumber(myNumber);
cout << myNumber; // prints 4

参考(在这种情况下(基本上是另一个变量的别名。尽管在第一种情况下不适用以下内容(因为您的参考为const(,但可以使用引用来修改它们所引用的对象。例如:

int c = 5;
int& d = c;
d = 12; // c is set to 12

在您的特殊情况下,引用是不变的别名,因此positions[j]不能通过first进行修改。

在第二种情况下,执行second = variable将对positions[j + 1] = variable进行评估。

&基于上下文具有不同的含义。

  1. 声明类型。

    int var;
    int& ref1 = var;           // Declares a reference to a variable
    int const& ref2 = var;     // Declares a const reference to a variable
    int& foo();                // Declares foo() whose return type is reference to an int
    void bar(int&);            // Declares bar whose argument type is reference to an int
    struct Foo
    {
       int& bar;              // Declares bar to be member variable of the
                              // class. The type is reference to an int
    };
    
  2. 取一个变量的地址(实际上任何lvalue(

    int var;
    int* ptr = &var;           // Initializes ptr with the address of var
    int arr[4];
    int* ptr2 = &(arr[3]);     // Initializes ptr2 with the address of the
                               // last element of arr
    
  3. 执行钻头和操作。

    int i = <some value>;
    int j = <some value>;
    int k = (i & j);          //  Initializes k with the result of computing
                              //  the bitwise AND of i and j
    

您在代码中拥有的是首次使用。

const Vector & first (positions[j]);

该行声明firstconst引用position[j]

最新更新