为什么constexpr假设我的方法是const?

时间:2017-06-19 14:43:42

标签: c++ const constexpr member-functions

编写基本类型包装器时,我从编译器中得到了这个错误:

struct Integer
{
    constexpr Integer( int i )
        : m_i( i )
    { }

    constexpr Integer& operator++( )
    {
        ++m_i;            // error: increment of member 'Integer::m_i' in read-only object
        return *this;     // error: binding 'const Integer' to reference of type 'Integer&' discards qualifiers
    }

    int m_i;
};

int main(int , char *[])
{
    Integer i = 0;
    ++i;
    ++i;
    ++i;
    return i.m_i;
}

编译器假设我的constexpr方法是const方法。为什么会这样?这是否意味着我的包装器将永远不会具有与原始类型相同的性能/优化机会?我的意思是:

int main(int , char *[])
{
    int i = 0;
    ++i;
    ++i;
    ++i;
    return i;
}

与我的代码相比,这会被优化吗?

2 个答案:

答案 0 :(得分:0)

简单地说,constexpr更强形式的const

答案 1 :(得分:-1)

要提高效果,请使用关键字内嵌

constexpr 使您的对象不可变