2015-10-20 35 views
1

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

这里是我谈论的例子:

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

谢谢!

回答

0

如何在不发生副本的情况下获得const valarray的切片?

有没有办法做到这一点,因为std::valarray不含std::slice_array 提出任何要求,所以猫不会只给你链接(指针引用),你要求std::slice_array

但std :: slice_array只能包含三个机器字, 很难想象情况,其中std::slice_array不能拷贝可以优化某些东西。例如从GCC /的libstdC++(仅数据,功能剥离):

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

其中_Array:

template<typename _Tp> 
    struct _Array { _Tp* const __restrict__ _M_data; }; 
相关问题