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

Mic*_*rus 2 c++ reference c++11

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


例如,在类的构造函数的情况下X,

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

private:
    const int &mValue;
};
Run Code Online (Sandbox Code Playgroud)

什么是确保这一点的好方法

class Y
{
public:

    /* ... */

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

private:
    int mValue;
};
Run Code Online (Sandbox Code Playgroud)

编译,但用临时调用,例如X x(100);,它不?


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

Ker*_* SB 9

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

void foo(const int&);

void foo(const int&&) = delete;
Run Code Online (Sandbox Code Playgroud)

后者是rvalues的更好匹配,因此不受欢迎的程序将选择已删除的重载并变得格式错误.

  • Builtin*xvalues*可以是限定的,因此如果你想禁止rvalues,const甚至对于`int`也很重要. (5认同)
  • 它是否必须是`const int &&`中的`const`?这是不必要的,对吗? (2认同)
  • @Rakete1111:呃.这取决于.对于内置类型,如果**仅*想要禁止prvalues,那么您不需要资格,因为内置prvalues永远不会被限定.但是用户定义的类型可能是合格的,并且OP也要求rvalues,而不是prvalues,并且xvalues当然可以被限定. (2认同)