При отладке некоторых наших кодов (С++) я нашел это:
inline std::string BufferToStr(
const unsigned char* buffer,
int index,
size_t length)
{
std::string retValue(reinterpret_cast<const char*>(&buffer[index], length));
return retValue;
}
Проблема с этим кодом (с учетом отсутствия указателей и проверок длины строк) заключается в том, что закрывающая скобка reinterpret_cast
была помещена после length
, когда она должна была после &buffer[index]
. Сначала я подумал, что это проблема с компилятором (используя VS2013), но после успешной компиляции с использованием VS2012 и gcc 4.6.3 я пришел к выводу, что это по какой-то причине разрешено. Код не будет работать ни в Windows, ни в Linux, поскольку в качестве указателя используется параметр длины.
Итак, мой вопрос - почему это компилируется? Глядя на документацию reinterpret_cast
, я не могу найти там никакой документации, говорящей, что вы можете передать ей список значений, разделенных запятыми, и что он будет делать с ним.