正在调用指针和引用方法
Calling pointer and reference method
如果有一个方法将指针作为参数,而另一个重载方法将引用作为参数,我如何具体调用其中一个?
例如。
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
请参阅工作示例。
相关文章:
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么常量方法可以采用非常量引用?
- 没有取消引用/解包对象的标准方法?
- C++方法中的引用变量
- 引用文件的适当方法是什么?
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 对结构方法的未定义引用
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 使用移动语义:右值引用作为方法参数
- Unity3D 导入 C++ DLL 用于按引用方法传递
- 通过引用方法传递对象
- 无法将从函数返回的向量传递给需要引用方法的函数
- 正在调用指针和引用方法
- 与const引用(方法链)相关联的临时对象的生命周期
- 方法内部的简单c++成员引用(方法解析后的链接器错误)
- 被引用方法的未定义引用
- 无法引用方法
- 我如何在外面引用 C++ 方法