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&&,然后不定义它,但这会产生错误的想法,只会导致链接器错误.
一般解决方案是添加已删除的重载:
void foo(const int&);
void foo(const int&&) = delete;
Run Code Online (Sandbox Code Playgroud)
后者是rvalues的更好匹配,因此不受欢迎的程序将选择已删除的重载并变得格式错误.