小编wil*_*iam的帖子

reinterpret_cast strangeness(逗号分隔表达式)

在调试我们的一些代码(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;
}
Run Code Online (Sandbox Code Playgroud)

这段代码的问题(忽略了缺少指针和字符串长度检查)是在它应该在之后的reinterpret_cast位置之后放置的右括号.起初我认为这是编译器的一个问题(使用VS2013),但在使用VS2012和gcc 4.6.3成功编译之后,我得出结论,这是出于某种原因允许的.由于length参数用作指针,因此代码不能在Windows或Linux上运行.length&buffer[index]

所以我的问题是为什么要编译?查看reinterpret_cast我的文档,我找不到任何文档,说你可以将逗号分隔的值列表传递给它,以及它将如何处理它.

c++

12
推荐指数
2
解决办法
449
查看次数

标签 统计

c++ ×1