在不更改函数中的对象或指针时,将对象或指针作为值传递
Pass object or pointer as value when not changing that object in function
在 c++ 中,有多种方法可以将对象作为参数传递给函数。我一直在阅读有关按值和引用传递的信息。
这些链接非常有用:
http://www.yoda.arachsys.com/java/passing.htmlhttp://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
}
两者都允许我访问它拥有的变量。但我想知道我应该使用哪一个,以及为什么。
在第一个示例中,f()
获取原始对象的副本,因此不可能更改后者。但是,调用复制构造函数,这可能非常昂贵,因此不建议作为通用方法。
在第二个示例中,f()
获取指针或(f(obj&x)
)对原始对象的引用,并允许对其进行修改。如果函数只接受const
指针或引用,如f(const object&x)
,它不能合法地更改对象。在这里,没有复制。因此,通过常量引用传递是参数的标准方法,不应修改。
你忽略了 c++ 的一个基本内容:常量正确性:声明 'int f(sockaddr_in *s)' 违反了这一点。"int f(sockaddr_in s)"不是,也可能是合理的(无论如何sockaddr_in很小或被复制)。因此,"int f(const sockaddr_in&s)"和"int f(sockaddr_in s)"可能都是一个不错的选择。
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它