我意识到这些可能是初学者的问题,但为了正确理解概念,我会欣赏可靠的答案或文档链接。
&
或*
在参数名称前面或在C ++函数中的数据类型之后是什么意思?
例如:
void ApplicationUI::requestFinished(QNetworkReply* reply) { //... }
或
void PostHttp::post(const QString &body) { //... }
加分问题
在上面的post函数中... const
是否需要此函数传递常量变量,或者它有不同的原因吗?
答案 0 :(得分:7)
在第一个示例(*
)中,您传递指向您的函数的指针,并在第二个示例(&
)中传递引用。
要了解两者之间的区别,请阅读以下文章:What are the differences between a pointer variable and a reference variable in C++?
加分问题:
传递值的一个主要缺点是,所有通过值传递的参数都会复制到参数中。当参数是大型结构或类时,这可能需要花费很多时间。参考文献提供了一种避免这种惩罚的方法。当通过引用传递参数时,将为实际参数创建引用(这需要最少的时间)并且不会复制值。这允许我们以最小的性能损失传递大型结构和类。
然而,这也使我们面临潜在的麻烦。引用允许函数更改参数的值,这在许多情况下是不合需要的。如果我们知道函数不应该改变参数的值,但又不想通过值传递,那么最好的解决方案是通过const引用。
您已经知道const引用是一个不允许更改被引用变量的引用。因此,如果我们使用const引用作为参数,我们向调用者保证函数不会(也不能)更改参数!
答案 1 :(得分:3)
*
表示参数是指针,&
通过引用传递