我使用 C++ 编程已有一段时间,但肯定不会称自己为专家。这个问题不是要解决我遇到的实际问题,而是要了解 C++ 在做什么。
假设我有一个需要单个参数的函数:
void doSomething(SomeClass& ref)
{
// do something interesting
}
(注:参数是对SomeClass的引用)然后我这样调用函数:
int main(int argc, char *argv[])
{
SomeClass a;
doSomething(a);
}
为什么这是合法的 C++?该函数需要对 SomeClass 的引用,但我向它传递了一个类型为 SomeClass 的静态分配变量。引用就像一个指针,不是吗?如果我们用指针替换引用,编译器会报错。为什么引用以这种方式与指针不同,幕后发生了什么?
如果这是一个愚蠢的问题,我很抱歉,这一直困扰着我!
最佳答案
如果您不再将引用视为类似于指针,我想您会更好地理解这一点。我想说进行这种比较有两个原因:
- 引用允许您将对象传递给函数以允许修改它们。这是 C 中指针的一个流行用例。
- 一旦编译,指针和引用的实现通常几乎相同。
但它们是不同的东西。您可以将引用视为一种为对象赋予新名称的方式。 int& x = y;
表示我想为我当前称为 y
的对象指定一个新名称。这个新名称是 x
。这两个标识 x
和 y
现在都指向同一个对象。
这就是您将对象本身作为引用传递的原因。你是说你希望函数有自己的标识符来引用你传递的对象。如果您不将 & 符号放入参数列表中,则该对象将被复制到函数中。这种复制通常是不必要的。
关于C++:为什么可以将静态创建的变量传递给需要引用的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5689996/