我在羽毛中看到了以下代码,很困惑:
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
进行评估。
&
基于上下文具有不同的含义。
-
声明类型。
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 };
-
取一个变量的地址(实际上任何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
-
执行钻头和操作。
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]);
该行声明first
为const
引用position[j]
。