1

可能重复:
C++ 函数:& 与星号
结合参数的各种符号(*、& 等)之间有什么区别?

我想知道C++ 函数调用中地址运算符&和引用运算符之间的区别。*例如采取以下功能

void foo (std::string& param)
{
     param = "Bar.";
     std::cout << param.size();
}

让我们在我们的main()函数中这样调用它......

int main()
{
      std::string test;
      foo(test);          //Why not foo(&test)?
      std::cout << test;  //Prints out the value "Bar."
}

首先,为什么&操作员允许我像指针一样分配一个值(当它不是指针时,分配一个在 RAII 和函数范围内幸存的值foo()),因为它可以在我的main()函数中打印出来即使不是static?我假设它不是指针,因为我可以size()通过使用.运算符而不是->用于指针的运算符来访问该方法。

&其次,在函数参数中使用运算符与使用运算符有什么区别*?它甚至与像这样的普通变量不同std::string param吗?它似乎被称为(foo(test)而不是foo(&test))。

4

2 回答 2

4

&函数参数特别表示此参数是通过引用传入的(传统上编译器将 this 实现为指针),这就是为什么您在main(). static与此无关。

&使用and向函数声明参数的区别*在于,第二个允许nullptr传入一个(或不存在或只是一个普通的无效地址),同时&保证此函数的参数引用了一个真实的对象. 除此之外,两者都提供了允许通过引用更改原始对象的类似功能。

于 2012-07-14T19:39:47.307 回答
0

test它自己(没有&)会将字符串的副本传递给函数,而这&意味着它将传递引用。

仅供参考:当您不需要引用时,最佳实践要求将所有对象作为 const 引用传递。

于 2012-07-14T19:36:47.950 回答