我在多个来源中读到 C++ 引用只不过是一个具有编译时间限制的指针。
如果这是真的,为什么我被迫取消引用指针以便将它传递给需要参数的函数?
void FooRef(const int&);
void FooPointer(const int*);
int main()
{
int* p = new int(5);
FooPointer(p);
FooRef(*p); // why do I have to dereference the pointer?
...
}
据我了解,如果我将 an 传递int
给FooRef
编译器,将为我从变量的地址创建指针(引用),但如果类型已经是指针,那么取消引用似乎毫无意义。在我看来,我正在取消引用一个指针,只是为了让编译器从取消引用的值创建另一个指针,这对我来说似乎毫无意义。
仅仅复制指针而不是仅仅引用+引用值不是更简单/更高效吗?(也许这真的是正在发生的事情?)
我在这里错过了什么吗?在这种情况下打电话FooRef
会比打电话慢FooPointer
吗?
并且在编译过程中引用和指针真的会产生相同的代码吗?