有没有办法将常量引用指定为不绑定临时值的参数类型(函数)?
也就是说,是否有一种标准的方法来指定引用是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&&
的函数,然后不定义它,但这会产生错误的想法,只会导致链接器错误。
答案 0 :(得分:9)
一般解决方案是添加已删除的重载:
void foo(const int&);
void foo(const int&&) = delete;
后者是rvalues的更好匹配,因此不受欢迎的程序会选择已删除的重载并变得格式不正确。