C++为什么调用带有引用的函数

C++ Why is it calling the function with reference

本文关键字:引用 函数 为什么 调用 C++      更新时间:2023-10-16

假设我有以下C++类。

class C
{
   int foo() const;
   int & foo();
};

我只是调用myC.foo(),我可以使用调试器看到它调用了带有引用的调试器。

为什么?

谢谢!

这可能是因为myC是一个非常量值,因此编译器更喜欢非常量方法。仅当从const值访问时,才优选const方法。例如

C value1;
value1.foo();  // int& foo();
const C value2;
value2.foo();  // int foo() const;

编辑

此外,正如Oli所指出的,C++中的重载解析不受方法返回类型的影响。因此,它不会根据值的使用方式来选择其中一个签名而不是另一个签名。

因为myC一定不是常量对象。

C++允许在const关键字的基础上重载函数。

如果创建了类的const对象,则只能通过该对象调用const成员函数,因为它们保证不会修改对象的状态。

非常量对象既可以调用const函数,也可以调用非常量成员函数,但编译器更倾向于使用非常量成员功能,而不是使用const成员函数,因此在您的情况下会出现这种行为。