正在调用指针和引用方法

Calling pointer and reference method

本文关键字:引用 方法 指针 调用      更新时间:2023-10-16

如果有一个方法将指针作为参数,而另一个重载方法将引用作为参数,我如何具体调用其中一个?

例如。

int foo (int const& lippman) { do something }
int foo (int && lippman) { do something else }

--所以现在,当我想调用其中一个时,我该如何调用它/编译器如何区分两者(显然是通过参数,但如何区分?)

感谢

int foo (X const&);
int foo (X&&);

这些不是指针。第一个是通过常量引用,第二个是通过r值引用。区分它们:

X x{};
foo( x ); // call the first version
foo( std::move(x) ); // call the second version (also with temporary: foo( X{} ); )

注:第三个过载(通过指针)是:

int foo(X* x); // or "const X* x" or "const X* const x"

使用与上面相同的x实例调用:

foo(&x); // get address of x and pass to "foo"

两个函数都有作为参数的引用,第一个是左值引用,第二个是右值引用。

第一个重载将用lvalues调用,第二个重载用rvalues:调用

int i = 42;
foo(i);  // first one gets called
foo(42); // second one gets called

这种行为在C++标准中有规定,编译器需要能够弄清楚什么是左值,什么是右值,以选择正确的重载。

注意,可以使用std::move使左值看起来像右值:

foo(std::move(i)); // second overload gets called

请参阅工作示例。