哪个const与哪个引用将更改参数并创建const对象?

时间:2018-06-27 23:57:26

标签: c++ templates constructor reference stl

我有这个模板调用:

int ia[] = { 9, 2, 5, 1, 8 };
const sav<int> sia( ia, sizeof( ia ) / sizeof( ia[ 0 ] ) );

我想对ia进行排序,然后创建sia。我这样尝试过:

template<typename T>
class sav {
public:
    sav(T& givenArray,size_t size) {
         for( int idx = 0; idx < size; ++idx){
            data.push_back(givenArray[idx]);
         }
         std::sort(data.begin(), data.end());
         for(int idx =0; idx<size; ++idx){
            givenArray[idx] = data.at(idx);
         }
    }
private:
    std::vector<T> data;
};

但是我不知道在这种情况下我必须在哪里写const才能使此代码正常工作。

1 个答案:

答案 0 :(得分:0)

使此代码有效的一种方法是将T&更改为T*

您实际上是通过将指针传递到数组的第一个元素来“传递”数组,并且还单独传递了长度。

还可以通过引用传递数组(在这种情况下,您不需要单独的length参数,因为length是数组类型的一方。

我不确定您所说的“ const”讨论是什么。