【发布时间】:2011-12-17 04:46:17
【问题描述】:
boost::array(或tr1或std版本)提供了一些比内置数组更好的附加功能。
到目前为止,我们的代码库仅包含内置数组,例如(组成,但样式匹配):
WORD m_lastReadFlags[FLAGS_MAX];
...
WORD flagBuffer[FLAGS_MAX];
if (getFlags(flagBuffer)) {
memcpy(m_lastReadFlags, flagBuffer, sizeof(m_lastReadFlags));
...
我想你会明白的。
现在,我的问题是,对于代码中的那些地方,插入boost::array 是有意义的(因为进行了其他更改),array 是 100% 语义保留内置数组的插入? (可能的编译器错误是可以的——只有无声的行为变化才是困扰我的。)
也就是说,可以重写上面的代码(例如)使用:
boost::array<WORD, FLAGS_MAX> m_lastReadFlags;
memcpy(可能适合使用c_array()或data())和其他类似数组的访问会保持不变? 是的,当然我也可以用数组替换本地缓冲区并删除memcpy 或使用std::copy 或类似的东西,但这个问题的重点是关于内置数组的兼容性和数组类。
更新:特别困扰我的一件事是内置数组用作指针的地方(如memcpy 案例中)。所有发生的事情都会被
编译器/处理正确吗?
作业呢?
T arr1[N]; // or array<T, N>
T arr2[N]; // or array<T, N>
T* p1;
...
// Note, not all combinations will compile:
arr1 = arr2;
p1 = arr1;
arr2 = p1;
...
【问题讨论】:
标签: c++ arrays visual-c++ boost refactoring