Я написал класс MyString и MyStringConst. Теперь мне нужно время от времени передавать MyString как MyStringConst, следовательно, перегружать оператор переноса. Я написал этоC++ reinterpret_cast - это всегда будет работать правильно?
MyString::operator const MyStringConst &() const
{
return reinterpret_cast<const MyStringConst &>(*this);
}
MyString имеет эти данные
char * str;
int length;
volatile int hashCode;
int bufferSize;
MyStringConst имеет эти данные
const char * c_str;
int length;
volatile int hashCode;
Плюс есть некоторые методы, которые в обеих строках можно пересчитать хэш-код.
Правильно ли это код. Я тестировал его на MSVC 2013, и он работает правильно, но я понятия не имею, можно ли его использовать в производственном коде, который может быть скомпилирован с помощью другого компилятора.
Если это два совершенно разных класса, вы не можете просто переосмыслить их. данные могут быть смещены и т. д. ... в чем смысл MyStringConst. Почему бы просто не использовать const MyString? – thang
@thang MyString выделяет новую строку, MyStringConst not (только оболочка вокруг указателя), но мне нужно их сравнить. –
На практике он будет PROBABLY работать во всех компиляторах, с которыми вы когда-либо столкнетесь в реальной жизни. Но в строгих условиях langauge-lawyer определенно не гарантируется работа. –