2015-10-20 55 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; }; 
相關問題