绑定到const引用的临时对象是否被视为const对象?

时间:2019-04-24 10:49:11

标签: c++ language-lawyer temporary-objects

考虑这段代码:

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;
}

https://godbolt.org/z/72pLzd

modify抛弃了其引用参数的恒定性。只要被引用的对象本身不是const,这是合法的(这就是const引用的常量性很少赋予优化益处的原因。)

我想了解与const ref临时绑定的情况。这样的对象总是const,总是非const,还是取决于临时对象的来源/构造方式(即getX返回{{ 1}})?

0 个答案:

没有答案