考虑这段代码:
struct X
{
int a;
};
X getX();
void modify(const X& x)
{
const_cast<X&>(x).a++;
}
int foo()
{
X x0 = getX();
const X x1 = getX();
const X& x2 = getX();
// Legal!
modify(x0);
// Illegal!
//modify(x1);
// Legal?
modify(x2);
return x0.a + x1.a + x2.a;
}
modify
抛弃了其引用参数的恒定性。只要被引用的对象本身不是const
,这是合法的(这就是const引用的常量性很少赋予优化益处的原因。)
我想了解与const ref临时绑定的情况。这样的对象总是const
,总是非const
,还是取决于临时对象的来源/构造方式(即getX
返回{{ 1}})?