在调试我们的一些代码(C++)时,我发现了这个:
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
我找不到任何文档说您可以将逗号分隔的值列表传递给它以及它将如何处理它。