C++:为什么可以将静态创建的变量传递给需要引用的函数?

标签 c++ reference dynamic-allocation static-allocation

我使用 C++ 编程已有一段时间,但肯定不会称自己为专家。这个问题不是要解决我遇到的实际问题,而是要了解 C++ 在做什么。

假设我有一个需要单个参数的函数:

void doSomething(SomeClass& ref)
{
    // do something interesting
}

(注:参数是对SomeClass的引用)然后我这样调用函数:

int main(int argc, char *argv[])
{
    SomeClass a;
    doSomething(a);
}

为什么这是合法的 C++?该函数需要对 SomeClass 的引用,但我向它传递了一个类型为 SomeClass 的静态分配变量。引用就像一个指针,不是吗?如果我们用指针替换引用,编译器会报错。为什么引用以这种方式与指针不同,幕后发生了什么?

如果这是一个愚蠢的问题,我很抱歉,这一直困扰着我!

最佳答案

如果您不再将引用视为类似于指针,我想您会更好地理解这一点。我想说进行这种比较有两个原因:

  1. 引用允许您将对象传递给函数以允许修改它们。这是 C 中指针的一个流行用例。
  2. 一旦编译,指针和引用的实现通常几乎相同。

但它们不同的东西。您可以将引用视为一种为对象赋予新名称的方式。 int& x = y; 表示我想为我当前称为 y 的对象指定一个新名称。这个新名称是 x。这两个标识 xy 现在都指向同一个对象。

这就是您将对象本身作为引用传递的原因。你是说你希望函数有自己的标识符来引用你传递的对象。如果您不将 & 符号放入参数列表中,则该对象将被复制到函数中。这种复制通常是不必要的。

关于C++:为什么可以将静态创建的变量传递给需要引用的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5689996/

相关文章:

c++ - 是否需要删除静态 vector ?

c++ - QTcpSocket/QTcpServer内存管理/服务器崩溃

.net - 在对象浏览器中找到命名空间,但在引用库中缺失

java - 使用 "=="语句

c++ - 通过引用传递给一个函数,它是一种提升吗?

正确分配多维数组

c++ - 以 STD 方式对两个系列求和

c# - 将结构数组从 C# 传递到 C++

c++ - 在设备上运行类构造函数/方法。如何?

c++ - 从带有迭代器参数的模板函数返回指针