声明函数时,参数string*
和string&
之间有什么区别?我知道string s
会复制字符串s并按值传递,但似乎在许多网站上,它们都引用string* s
和string& s
作为参考传递。我是C ++的新手,这是我唯一无法弄清楚自己的东西。在此先感谢:)
答案 0 :(得分:2)
答案 1 :(得分:1)
通过指针string* s
传递一个地址,因此s
不是string
类型,而是一个地址。如果你取消引用它,那就是使用包含*s
的表达式,那么*s
是字符串类型。
当通过引用string& s
传递时,s
的类型为字符串,因此不需要解除引用。
答案 2 :(得分:0)
很多几乎正确的答案。许多都适用于特定的实现,但依赖于编译器的未指定行为。
除了.
vs ->
:
一般来说,语言规范对引用的描述很少,故意为编译器编写者提供了很多实施自由度。它们的操作很像const指针这一事实并不能保证规范。
答案 3 :(得分:0)
我发现指针参数在两个方面非常有用:
答案 4 :(得分:-2)
主要区别在于如何调用函数。请考虑以下示例:
void f(string *s)
{}
int main() {
string s;
f(&s);
}
和参考版本:
void f(string &s) { }
int main() {
string s;
f(s);
}
因此函数调用看起来不同......
`