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

标签 c++ constants 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;
}

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

最佳答案

简单地说,constexprconststronger 形式。

关于c++ - 为什么 constexpr 假设我的方法是 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44633567/

相关文章:

c++ - 错误 : expression must have constant value. 对于一个明显的常量值

c++ - constexpr new 如何分配内存?

c++ - 如何在调试时将 Visual Studio 配置为 'skip' 智能指针代码?

c++ - CMake:如何根据不同的主条目进行编译

c++ - C++11 是否允许 vector<const T>?

c++ - C++11 中的 constexpr 概念

c++ - 注册 Microsoft All-In-One 框架提供的 Windows 上下文菜单处理程序(CppShellExtContextMenuHandler 项目)

c++ - 这是指针的问题吗?

c++ - 有没有办法更改 const 结构的成员?

c++ - 尝试从常量 char * 类型的指针复制数据时出现 "accessing beyond memory"错误。为什么?