编写原始类型包装器时,我从编译器中得到了这个错误:
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;
}
与我的代码相比,这会得到优化吗?
最佳答案
简单地说,constexpr
是const
的stronger 形式。
关于c++ - 为什么 constexpr 假设我的方法是 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44633567/