如果我们在Qt
中将以下内容写为函数的参数:QString &tableName
这是否意味着我们通过参考传递?
感谢。
答案 0 :(得分:6)
严格来说,这是一个函数参数,而不是函数参数。参数是在函数参数列表中声明的变量;参数是调用函数传递给函数的值。因此参数QString &tableName
通过引用传递。但作为函数参数,&tableName
将表示“tableName
”的地址。
已更新:根据要求,以下是一个代码示例,以澄清区别:
void f (double y) ;
f (99.0) ;
double y
是一个参数声明;它类似于变量声明。 y
是一个函数参数。
99.0
是一个函数参数;它是一个表达式,必须可以转换为double
类型。
答案 1 :(得分:5)
是的,这是C ++中的pass-by-reference。如果您不想意外更改tableName,也可以编写QString const & tableName
。
答案 2 :(得分:4)
是。提示:如果您不想更改,请将其设为const
。
答案 3 :(得分:2)
请注意,与大多数非平凡的Qt基本类型一样,QString是一个轻量级容器对象,它实现了“copy on write”语义。所以通过引用传递一个的唯一原因是你的函数想要修改调用者的副本,并且没有任何理由通过const引用传递一个(除非你对Qt知之甚少)。