做什么“&”和前面参数中的“*”是什么意思?

时间:2013-06-30 08:53:13

标签: c++

我意识到这些可能是初学者的问题,但为了正确理解概念,我会欣赏可靠的答案或文档链接。

&*在参数名称前面或在C ++函数中的数据类型之后是什么意思?

例如:

void ApplicationUI::requestFinished(QNetworkReply* reply) { //... }

void PostHttp::post(const QString &body) { //... }

加分问题 在上面的post函数中... const是否需要此函数传递常量变量,或者它有不同的原因吗?

2 个答案:

答案 0 :(得分:7)

在第一个示例(*)中,您传递指向您的函数的指针,并在第二个示例(&)中传递引用。

要了解两者之间的区别,请阅读以下文章:What are the differences between a pointer variable and a reference variable in C++?

加分问题:

  

传递值的一个主要缺点是,所有通过值传递的参数都会复制到参数中。当参数是大型结构或类时,这可能需要花费很多时间。参考文献提供了一种避免这种惩罚的方法。当通过引用传递参数时,将为实际参数创建引用(这需要最少的时间)并且不会复制值。这允许我们以最小的性能损失传递大型结构和类。

     

然而,这也使我们面临潜在的麻烦。引用允许函数更改参数的值,这在许多情况下是不合需要的。如果我们知道函数不应该改变参数的值,但又不想通过值传递,那么最好的解决方案是通过const引用。

     

您已经知道const引用是一个不允许更改被引用变量的引用。因此,如果我们使用const引用作为参数,我们向调用者保证函数不会(也不能)更改参数!

答案 1 :(得分:3)

*表示参数是指针,&通过引用传递