繁体   English   中英

使用const&和&的C ++模板化函数包装器参数

[英]C++ templated function wrapper arguments using const& versus &

为构造函数创建包装函数,例如以下编译:

#include <iostream>

template <typename T>
class wrapper
{
public:
  template <typename A0>
  T* operator () (const A0& a0) const
  {
    return new T(a0);
  }
};

class Foo
{
public:
  Foo(int i) { std::cout << "Foo:Foo(" << i << ")" << std::endl; }
};

int main(int argc, char** argv)
{
  wrapper<Foo>()(42);
  return 0;
}

但是,当我更新该行时,代码无法编译:

T* operator () (const A0& a0) const

至:

T* operator () (A0& a0) const

我的猜测是这与右值'42'无法绑定到非常量引用有关。 但是,当我将引用设为const时,这将意味着我永远无法调用实际上接受非const引用的构造函数。 有人可以解释这里发生了什么,什么才是使它正常工作的正确方法?

我的猜测是这与右值'42'无法绑定到非常量引用有关。

是。 正确。

但是,当我将引用设为const时,这将意味着我永远无法调用实际上接受非const引用的构造函数。

否。不正确。 您仍然可以使用非常量引用来调用它。 实际上,这就是const-ness的工作方式:非const引用/指针/对象可以隐式转换为const引用/指针/对象,但反之亦然。

所以尝试一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM