2.4 Overloading by Different References

本文详细解析了C++中不同类型的引用:常量左值引用、非常量左值引用及右值引用的区别与应用场景,包括如何传递参数以及它们对临时对象的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Overloading by Different References

在我们了解完右值引用之后,我们有三种形参可以pass by reference

void foo(const std::string& arg)

void foo(std::string& arg)

void foo(std::string&& arg)

2. void foo(const std::string& arg)

①形参表示 你对传过来的实参 只具有读的权限
②将实参作为 const lvalue reference
③仅作为一个输入参数
你可以传递给该函数的实参
一个可变的有名对象
一个const 修饰的对象
一个无名的临时对象
一个被std::move()标记的对象

3.void foo(std::string& arg)

①将实参作为 non-const- lvalue reference
②你对传过来的实参,有读写的权限
③只能传递可变的有名对象
④可作为In/Out参数

4.void foo(std::string&& arg)

①将实参视为 non-const rvalue reference
②对传递过来的实参 有读写的权限
你可以传递给该函数的实参
一个无名的临时变量
一个被std::move标记的对象,且该对象没有被const修饰

5.const Rvalue References

void foo(const std::string&& arg)

可以这么写,但没有什么意义

② 一个被const 修饰的对象,然后用std::move给B

const MyString a(5, "Hello");
     cout <<"a" << a << endl;

 MyString B = std::move(a);

如果这个对象有const Rvalue References的形参,那么调用该函数
如果没有那么就调用 拷贝构造函数
VS直接给出警告 不要对const修饰的对象使用std::move

### Java中的方法重载 #### 定义与概念 在Java编程语言里,当在同一类中存在多个具有相同名称但参数列表有所差异的方法时,则这些方法构成了方法重载。这意味着可以通过调整输入参数的数量、类型或是顺序来区分各个版本的方法[^1]。 #### 参数列表的不同形式 为了实现有效的方法重载,在定义多个同名方法时需确保它们之间的区别体现在以下几个方面之一: - **参数数量不同**:即使其他部分完全一致,只要两个方法接收的参数数目不一样就可以构成有效的重载关系。 - **参数类型的组合不同**:如果两个方法接受相等数目的参数但是各位置上的数据类型不匹配也能够形成合法的重载情况。 - **参数次序的变化**:对于多于一个以上入参的情况来说,即便保持相同的总数目和种类,仅改变其排列也能达成新的重载实例[^2]。 需要注意的是,仅仅依靠返回值类型的差异不足以创建一个新的重载版本;也就是说,不能单纯因为改变了函数的结果类型就认为实现了真正的重载操作[^3]。 #### 实际应用案例 下面给出一段简单的代码片段用于展示如何利用上述原则来进行实际开发工作: ```java public class Calculator { public int add(int a, int b){ return a + b; } // 改变参数数量 public double add(double a, double b, double c){ return a + b + c; } // 修改参数类型 public String concatenate(String str1, Integer num){ return str1 + " " + num.toString(); } // 调整参数顺序 public boolean compare(Integer i, Double d){ return i.doubleValue() == d; } public boolean compare(Double d, Integer i){ return d.intValue() == i; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值