调用指针和引用方法

时间:2014-09-24 14:27:06

标签: c++ pointers

如果有一个方法将指针作为参数,另一个方法将引用作为参数,我该如何专门调用其中一个?

例如。

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

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

由于

2 个答案:

答案 0 :(得分:3)

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

这些不是指针。第一个是const引用,第二个是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"

答案 1 :(得分:2)

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

第一个重载将使用左值调用,第二个使用右值:

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

查看working example