我可以从const valarray获取const slice_array吗?

时间:2015-10-20 02:15:43

标签: c++ valarray

我有一个接受对valarray的const引用的函数,我希望能够切片数组并将切片传递给另一个需要const slice_array的函数。我知道我可以使用operator []和一个切片从原始的valarray中获取一个新的,复制的valarray,但我想避免复制。一切都是常数,所以我觉得这应该没问题。但是,valarray的下标运算符的文档仅在应用于非const valarrays时返回slice_array对象。这在valarray类中是一种主要的缺陷。我错过了什么吗?如何在不产生副本的情况下获得一个const valarray片段?

这是我正在谈论的一个例子:

void foo( const valarray<double> &big_stuff )
{
    const slice_array<double> small_stuff = big_stuff[slice(start, size, stride)];
    bar( small_stuff );
}

谢谢!

1 个答案:

答案 0 :(得分:0)

  

如何在不产生副本的情况下获得一个const valarray片段?

由于myaccount.google.com -> "Sign-in & security" -> "Allow less secure apps: ON" 不包含std::valarray,因此无法执行此操作 对于任何请求,所以它不会只给你要求的std::slice_array链接(指针,引用)。

但是std :: slice_array只能包含三个机器字, 很难想象没有std::slice_array副本可以优化某些东西的情况。例如,从gcc / libstdc ++(仅数据,函数剥离):

std::slice_array

其中_Array:

 template<typename _Tp>
  class slice_array {
    const size_t      _M_sz;
    const size_t      _M_stride;
    const _Array<_Tp> _M_array;
  };
相关问题