0

在 c++ 中,有多种方法可以将对象作为参数传递给函数。我一直在阅读有关按值传递和引用传递的内容。

这些链接非常有用:

http://www.yoda.arachsys.com/java/passing.html http://www.yoda.arachsys.com/csharp/parameters.html

对于我现在想知道的 c++,我也看到了这篇文章:

http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

这些涉及按值传递和引用之间的差异。最后一篇文章也描述了这个问题的一些利弊。我想知道在函数中未修改对象的情况下将参数作为值传递的利弊。

int f(sockaddr_in s) {
// Don't change anything about s
}

int f(sockaddr_in *s) {
// Don't change anything about s
}

两者都允许我访问它拥有的变量。但我想知道我应该使用哪一个,以及为什么。

4

2 回答 2

1

In the first example f() obtains a copy of the original object and hence cannot possibly change the latter. However, the copy constructor is invoked, which may be quite expensive and is therefore not advisable as a general method.

In the second example f() either obtains a pointer or (for f(obj&x)) a reference to the original object and is allowed to modify it. If the function only takes a const pointer or reference, as in f(const object&x), it cannot legally change the object. Here, no copy is made. Therefore, passing by const reference is the standard approach for parameter that shall not be modified.

于 2013-10-28T14:12:44.093 回答
1

您忽略了 c++ 的一个基本内容: const 正确性:声明 'int f(sockaddr_in *s)' 违反了这一点。'int f(sockaddr_in s)' 不是并且可能是合理的(sockaddr_in 很小或被复制)。因此,'int f(const sockaddr_in& s)' 和 'int f(sockaddr_in s)' 可能都是不错的选择。

于 2013-10-28T14:14:49.490 回答