Advertisement

C++中关于形参与const形参的函数重载问题

阅读量:

record lookup( phone);

record lookup(const phone);

这两个属于函数重载吗?

为了探寻实参与形参之间的关系这一问题, 我们需要深入分析它们之间的相互作用. 两者的区别仅在于是否将形参声明为const变量, 这种差异并不会影响传递给函数的对象. 因此, 第二个函数声明被视为对第一个声明的重复.

原因:参数传递的方式是什么?在复制实参到形参时,并未考虑该形参是否是不可变类型的(即是否为const)。因为函数仅操作这些独立于被复制实体的数据结构副本。所以,在调用函数时既可以提供一个不可变对象作为目标传入一个对应不可变形式参数(即target),也可以传入一个可变对象作为目标传入另一个对应可变形式参数(即void)。这两种情况下的形式参数并无本质区别

比如:

record lookup(15001805405);//这里就假设传递个本人的手机号码吧

此时应该调用上面的哪个函数呢?很明显有两个都可以。形式参数和实际参数各自占据独立的空间区域,并且彼此之间不会产生影响。

然而此时该编译器便陷入困惑面对二义性难题随后意识到这组函数并不符合函数重载的标准

在C++编程中,在考虑变量作为参数传递时(ps:即当涉及变量传递至常量引用参数时),变量与其常量引用参数之间的等价性仅限于非引用形式的情形下成立)。具体而言,在存在常量引用参数的情

全部评论 (0)

还没有任何评论哟~