编写基本类型包装器时,我从编译器中得到了这个错误:
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;
}
与我的代码相比,这会被优化吗?
答案 0 :(得分:0)
简单地说,constexpr
是更强形式的const
。
答案 1 :(得分:-1)
要提高效果,请使用关键字内嵌。
constexpr 使您的对象不可变