編寫基本類型的包裝,我從編譯器這個錯誤:爲什麼constexpr假設我的方法是const?
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;
}
會相比,我的這個代碼進行優化呢?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3598.html – NathanOliver
@NathanOliver我不能相信他們在C++ 11中沒有考慮它。我啓用了C++ 14,現在編譯。 – nyarlathotep108