我在下面看到了以下代码,我很困惑:
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);
}
}
谁能告诉我什么&#34;&amp;&#34;用于这里?我用Google搜索&#34; c ++&amp;类&变量&#34;但没有找到答案。
更新:我知道什么参考,但认为Vector和&#34;&amp;&#34;之间不应该有任何空格。谢谢你们澄清一下。
答案 0 :(得分:4)
这意味着first
是引用(在本例中为const
引用),类型为Vector
的对象,而不是输入Vector
。
详细了解参考资料here。
答案 1 :(得分:2)
这被称为参考。我通常会编写像Type& name
之类的引用来清楚地表明引用是类型的一部分。
引用就像指针更容易使用但有一些限制。以下是您可以使用引用的示例:
void add1ToThisNumber(int& num) {
num += 1;
}
// elsewhere...
int myNumber = 3;
add1ToThisNumber(myNumber);
cout << myNumber; // prints 4
答案 2 :(得分:1)
reference(在本例中)基本上是另一个变量的别名。虽然以下内容不适用于第一种情况(因为您的引用为const
),但引用可用于修改它们所引用的对象。举个例子:
int c = 5;
int& d = c;
d = 12; // c is set to 12
在您的特定情况下,引用是不可变的别名,因此无法通过positions[j]
修改first
。
在第二种情况下,执行second = variable
将评估为positions[j + 1] = variable
。
答案 3 :(得分: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
};
获取变量的地址(真正的任何左值)
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
执行按位AND操作。
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
的{{1}}引用。