指定不绑定临时对象的`const int&`

时间:2016-10-04 08:58:07

标签: c++ c++11 reference

有没有办法将常量引用指定为不绑定临时值的参数类型(函数)? 也就是说,是否有一种标准的方法来指定引用是const但是它只能绑定到非临时值,试图绑定到临时值导致编译器错误¹?

例如,对于类X的构造函数,

class X
{
public:
    X(const int &value)
      : mValue(value)
    {}

private:
    const int &mValue;
};

什么是确保

的好方法
class Y
{
public:

    /* ... */

    X* GetXForValue() const
    {
        return new X(mValue);
    }

private:
    int mValue;
};

编译,但是当用临时调用时,例如X x(100);,它没有?

¹)我可以重载int&&的函数,然后不定义它,但这会产生错误的想法,只会导致链接器错误。

1 个答案:

答案 0 :(得分:9)

一般解决方案是添加已删除的重载:

void foo(const int&);

void foo(const int&&) = delete;

后者是rvalues的更好匹配,因此不受欢迎的程序会选择已删除的重载并变得格式不正确。