【发布时间】:2011-05-20 00:23:21
【问题描述】:
我正在尝试提取一个 const 指针以指向数组的一部分。我发现它在使用向量时工作正常,但在使用 valarray 时不会编译(VS 2008)。谁能解释一下是什么问题?
struct vector_test
{
std::vector<int> v;
const int *pointy(const int i) const
{
return &(v[i]); // Ok
}
};
struct valarray_test
{
std::valarray<int> v;
const int *pointy(const int i) const
{
return &(v[i]); // error C2102: '&' requires l-value
}
};
【问题讨论】:
-
这两种用法都违反了vector或valarray的封装。
-
@Charles Peng:第一个在技术上还可以。向量明确保证与 C 样式数组兼容的连续存储。此外,该标准准确定义(a)当向量的迭代器无效(例如在调整大小时)时,向量的迭代器可以实现为指向元素类型的指针(b)
-
@sehe:感谢您的评论。我知道第一次使用是可以的。但我想说的是,它违背了封装的目的。
-
好的。我明白你的意思。我同意,但应该注意的是,这最终取决于你使用向量的目的。您可以将其用作模块化容器,或者仅用作具有堆栈语义的“动态数组外壳”。该标准确实明确支持这两种使用场景。
-
@Charles Peng:不幸的是,许多像 BLAS/LAPACK 这样的代码不支持 valarray。它们只支持指针。